{"id":60508,"date":"2023-10-26T12:46:56","date_gmt":"2023-10-26T15:46:56","guid":{"rendered":"https:\/\/kinqsta.com\/pt\/?p=60508&#038;preview=true&#038;preview_id=60508"},"modified":"2023-10-31T05:52:59","modified_gmt":"2023-10-31T08:52:59","slug":"git-avancado","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/","title":{"rendered":"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico"},"content":{"rendered":"<p>O <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> \u00e9 uma ferramenta poderosa para controle de vers\u00e3o e tem presen\u00e7a dominante nesta \u00e1rea. Para a maioria das tarefas do dia a dia, o Git pode ser simples de usar gra\u00e7as \u00e0 repeti\u00e7\u00e3o de comandos. No entanto, h\u00e1 muitas situa\u00e7\u00f5es em que voc\u00ea precisa de mais do que o b\u00e1sico. Como tal, existem diversos comandos avan\u00e7ados do Git que podem elevar suas habilidades com a ferramenta a um novo patamar.<\/p>\n<p>Isso tamb\u00e9m vai te apresentar v\u00e1rios conceitos do Git que voc\u00ea normalmente n\u00e3o encontraria. Por exemplo, como usar o armazenamento tempor\u00e1rio, conhecido como stashing, em vez de fazer commits de mudan\u00e7as, como fazer rebase e como adicionar arquivos \u00e0 sua \u00e1rea de teste, tamb\u00e9m chamada de staging area. Ao dominar esses conceitos, voc\u00ea talvez descubra que eles s\u00e3o ainda mais \u00fateis para a sua equipe.<\/p>\n<p>Neste artigo, apresentamos diferentes comandos avan\u00e7ados do GIT que voc\u00ea vai querer conhecer. Contudo, antes de come\u00e7ar a utiliz\u00e1-los, \u00e9 importante ter algumas habilidades e compreender certos conceitos e informa\u00e7\u00f5es. Vamos analisar isso primeiro.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Pr\u00e9-requisitos recomendados<\/h2>\n<p>Embora voc\u00ea possa aprender o <a href=\"https:\/\/kinqsta.com\/pt\/blog\/git-para-desenvolvimento-web\/\" rel=\"noopener\">b\u00e1sico do Git<\/a> e entender alguns dos comandos intermedi\u00e1rios, como <code>git delete<\/code>, voc\u00ea precisa compreender mais ferramentas para lidar com comandos avan\u00e7ados.<\/p>\n<p>As dicas que compartilhamos aqui n\u00e3o ser\u00e3o adequadas para um iniciante no Git, portanto, se o <a href=\"https:\/\/kinqsta.com\/pt\/blog\/controle-de-versoes-wordpress\/\" rel=\"noopener\">controle de vers\u00e3o<\/a>, em geral, for novo para voc\u00ea, recomendamos que passe algum tempo usando os comandos b\u00e1sicos diariamente antes de tentar avan\u00e7ar no seu repert\u00f3rio.<\/p>\n<p>Em resumo, aqui est\u00e1 uma lista r\u00e1pida de aspectos que voc\u00ea precisa entender:<\/p>\n<ul>\n<li>Conceitos b\u00e1sicos do Git, como commits, branches, pull requests e outros.<\/li>\n<li>Familiaridade com os comandos b\u00e1sicos do Git, como <code>git add<\/code>, <a href=\"https:\/\/kinqsta.com\/pt\/blog\/git-mesclagem\/\"><code>git merge<\/code><\/a>, <code>git commit<\/code> e <code>git push<\/code>.<\/li>\n<li>Para tarefas avan\u00e7adas do Git, voc\u00ea precisa ser capaz de <a href=\"https:\/\/kinqsta.com\/pt\/blog\/comandos-linux\/\" rel=\"noopener\">navegar em um Terminal<\/a>.<\/li>\n<\/ul>\n<p>\u00c9 vantajoso ter experi\u00eancia trabalhando com o Git em um ambiente de equipe, j\u00e1 que muitos desses comandos podem ter um impacto significativo em um c\u00f3digo compartilhado. Por exemplo, voc\u00ea pode usar alguns desses comandos apenas quando estiver em uma posi\u00e7\u00e3o de responsabilidade. Isso significa que voc\u00ea deve ser cauteloso e compreender <em>quando<\/em> \u00e9 apropriado utilizar esses comandos.<\/p>\n<h2>Git avan\u00e7ado: 12 comandos poderosos que voc\u00ea vai querer conhecer<\/h2>\n<p>O restante deste artigo abordar\u00e1 12 comandos avan\u00e7ados do Git que levar\u00e3o voc\u00ea al\u00e9m do b\u00e1sico e o transformar\u00e3o em um assistente do Git. Vamos come\u00e7ar com um comando que voc\u00ea talvez use mais do que outros.<\/p>\n<h3>1. Rebasing<\/h3>\n<p>Em primeiro lugar, o rebasing \u00e9 um poderoso comando no Git que oferece uma alternativa \u00e0s solicita\u00e7\u00f5es de pull. Ele permite que voc\u00ea integre todos os novos commits que voc\u00ea fez ap\u00f3s uma diverg\u00eancia da branch em uma nova branch e insira as altera\u00e7\u00f5es no topo da base. Isso pode ser \u00fatil quando voc\u00ea deseja incorporar altera\u00e7\u00f5es de outra branch sem criar um commit de merge, por qualquer motivo.<\/p>\n<p>Um caso de uso comum para o rebasing \u00e9 quando voc\u00ea est\u00e1 trabalhando em um branch de funcionalidade e deseja incorporar as altera\u00e7\u00f5es da branch principal sem gerar um commit de merge. Isso ajuda a manter o hist\u00f3rico do projeto limpo, embora possa levar mais tempo para ser executado e voc\u00ea possa encontrar mais erros durante o merge.<\/p>\n<p>Para fazer o rebasing de um branch, use o comando <code>git rebase<\/code>. Aqui est\u00e1 um exemplo em que estamos fazendo rebasing de uma branch para outra:<\/p>\n<pre><code class=\"language-bash\">git checkout foo-branch\n\ngit rebase main\n<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m pode listar os commits que pretende liberar e dar a voc\u00ea a chance de edit\u00e1-los com anteced\u00eancia. Portanto, \u00e9 poss\u00edvel agrupar commits, editar mensagens de commit e realizar outras a\u00e7\u00f5es. Para isso, voc\u00ea pode utilizar a op\u00e7\u00e3o <code>--interactive<\/code> ou <code>--i<\/code> para executar um &#8220;rebasing interativo&#8221;<\/p>\n<pre><code class=\"language-bash\">git rebase --interactive &lt;other-branch-name&gt;<\/code><\/pre>\n<p>Falando nisso, a redu\u00e7\u00e3o de commits em um \u00fanico para organizar um hist\u00f3rico de commits \u00e9 um caso de uso comum para o rebasing. Isso pode tornar o hist\u00f3rico de commits mais f\u00e1cil de ler e entender.<\/p>\n<p>Para fazer isso durante um rebasing, voc\u00ea segue o sinalizador com o n\u00famero de commits que deseja agrupar, o que combinar\u00e1 os commits em um s\u00f3:<\/p>\n<pre><code class=\"language-bash\">git rebase -i HEAD~3\n<\/code><\/pre>\n<p>Isso abrir\u00e1 uma janela interativa de rebasing, muito parecida com uma janela de commit, na qual voc\u00ea pode escolher e editar os commits que deseja eliminar:<\/p>\n<figure id=\"attachment_155613\" aria-describedby=\"caption-attachment-155613\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155613 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-rebase-terminal.png\" alt=\"Executando um rebasing do git no Terminal.\" width=\"1000\" height=\"606\"><figcaption id=\"caption-attachment-155613\" class=\"wp-caption-text\">Executando um rebasing do git no Terminal.<\/figcaption><\/figure>\n<p>Voc\u00ea tem uma lista de commits na parte superior da tela e uma sele\u00e7\u00e3o de comandos na parte inferior, juntamente com algumas outras informa\u00e7\u00f5es relevantes. A op\u00e7\u00e3o padr\u00e3o \u00e9 <code>pick<\/code> um commit, o que significa escolher esse commit sem efetuar altera\u00e7\u00f5es nele.<\/p>\n<p>No entanto, existem <a href=\"https:\/\/git-scm.com\/docs\/git-rebase\" target=\"_blank\" rel=\"noopener noreferrer\">muitos outros comandos<\/a> que podem ajudar na navega\u00e7\u00e3o durante um rebase. Por exemplo, voc\u00ea pode reescrever uma mensagem de commit ou agrupar v\u00e1rios commits juntos. Para fazer essas altera\u00e7\u00f5es e utilizar os comandos, voc\u00ea precisar\u00e1 interagir com o editor do seu Terminal. O editor padr\u00e3o costuma ser o Vim, portanto, \u00e9 importante estar <a href=\"https:\/\/linuxhandbook.com\/basic-vim-commands\/\" target=\"_blank\" rel=\"noopener noreferrer\">familiarizado com esse editor<\/a>.<\/p>\n<p>A etapa final \u00e9 salvar suas altera\u00e7\u00f5es e, em seguida, envi\u00e1-las para a branch remota.<\/p>\n<h3>2. Revertendo, resetando e cancelando o ambiente de teste<\/h3>\n<p>O Git \u00e9 not\u00f3rio quando se trata de desfazer altera\u00e7\u00f5es. Em geral, \u00e9 um processo dif\u00edcil, com uma tend\u00eancia a gerar erros. No entanto, se voc\u00ea fizer altera\u00e7\u00f5es no diret\u00f3rio de trabalho ou na \u00e1rea de teste que deseja desfazer, existem alguns comandos do Git que podem ajudar.<\/p>\n<p>Na verdade, o Git fornece orienta\u00e7\u00e3o sobre como desfazer o est\u00e1gio de um arquivo se voc\u00ea executar um <code>git status<\/code>:<\/p>\n<figure id=\"attachment_155614\" aria-describedby=\"caption-attachment-155614\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155614 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-status-guidance.png\" alt=\"O Git mostra como remover um arquivo da \u00e1rea de teste durante a exibi\u00e7\u00e3o do status.\" width=\"1000\" height=\"435\"><figcaption id=\"caption-attachment-155614\" class=\"wp-caption-text\">O Git mostra como remover um arquivo da \u00e1rea de teste durante a exibi\u00e7\u00e3o do status.<\/figcaption><\/figure>\n<p>Dessa forma, voc\u00ea pode remover um commit da branch atual e envi\u00e1-lo para outro lugar com facilidade:<\/p>\n<pre><code class=\"language-bash\">git reset HEAD &lt;commit&gt;\n<\/code><\/pre>\n<p>Isso faz com que sua branch volte um commit, como se voc\u00ea removesse o \u00faltimo commit conhecido. Voc\u00ea pode at\u00e9 ter um caso de uso em que deseja redefinir uma branch para o seu estado original. Nesse caso, voc\u00ea pode redefinir em rela\u00e7\u00e3o \u00e0 origem remota, usando <code>git reset --hard origin\/main<\/code>, por exemplo. No entanto, observe que essas altera\u00e7\u00f5es ser\u00e3o perdidas para sempre.<\/p>\n<p>Embora o comando <code>git checkout<\/code> seja usado com frequ\u00eancia e seja considerado b\u00e1sico, voc\u00ea tamb\u00e9m pode us\u00e1-lo para remover o est\u00e1gio dos arquivos antes de um commit:<\/p>\n<pre><code class=\"language-bash\">git checkout -- &lt;filename&gt;\n<\/code><\/pre>\n<p>Observe o espa\u00e7o entre os tra\u00e7os e o espa\u00e7o reservado para o nome do arquivo. Aqui, o comando remove o est\u00e1gio do arquivo que voc\u00ea especificar e descarta as altera\u00e7\u00f5es do diret\u00f3rio de trabalho. Observe que isso excluir\u00e1 todas as altera\u00e7\u00f5es locais que voc\u00ea fizer em um arquivo. Portanto, certifique-se duas ou at\u00e9 tr\u00eas vezes de que realmente n\u00e3o precisa dessas altera\u00e7\u00f5es n\u00e3o salvas.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode utilizar o\u00a0\u00a0<code>git revert<\/code> para desfazer as altera\u00e7\u00f5es feitas em um commit. No entanto, isso n\u00e3o desfaz as altera\u00e7\u00f5es, mas cria um novo commit que desfaz as altera\u00e7\u00f5es feitas no commit anterior.<\/p>\n<p>A principal diferen\u00e7a aqui \u00e9 que o comando n\u00e3o move nenhum ponteiro de indica\u00e7\u00e3o para o novo commit, mas mant\u00e9m os commits antigos. Isso \u00e9 \u00fatil quando voc\u00ea deseja desfazer altera\u00e7\u00f5es sem remov\u00ea-las do hist\u00f3rico de commits.<\/p>\n<p>O comando espera receber uma indica\u00e7\u00e3o e \u00e9 simples reverter o commit mais recente:<\/p>\n<pre><code class=\"language-bash\">git revert HEAD\n<\/code><\/pre>\n<p>No entanto, voc\u00ea tem muito mais possibilidades de restaurar e alterar arquivos e commits. As pr\u00f3ximas duas entradas desta lista de comandos avan\u00e7ados do Git tratar\u00e3o disso.<\/p>\n<h3>3. Restaurando arquivos para estados padr\u00e3o<\/h3>\n<p>Com o Git, voc\u00ea pode restaurar facilmente um arquivo ao seu estado padr\u00e3o usando um comando relativamente novo: <code>git restore<\/code>. Na verdade, voc\u00ea deve considerar esse comando como um substituto para <code>git reset<\/code> na maioria das circunst\u00e2ncias, pois oferece recursos mais avan\u00e7ados. Por exemplo, voc\u00ea pode obter o mesmo resultado com <code>git restore --staged &lt;filename&gt;<\/code> e com <code>git reset HEAD<\/code>.<\/p>\n<p>No entanto, o comando pode fazer mais: voc\u00ea tamb\u00e9m pode restaurar os arquivos para os estados padr\u00e3o. Para isso, execute <code>git status<\/code> tamb\u00e9m:<\/p>\n<pre><code class=\"language-bash\">git restore &lt;filename&gt;\n<\/code><\/pre>\n<p>Isso remover\u00e1 as altera\u00e7\u00f5es do diret\u00f3rio de trabalho como se nada tivesse acontecido. Assim como em <code>git checkout -- &lt;filename&gt;<\/code>, voc\u00ea deve se certificar de que n\u00e3o quer nenhuma das altera\u00e7\u00f5es locais, pois elas ser\u00e3o irrevers\u00edveis.<\/p>\n<h3>4. Altera\u00e7\u00e3o de commits<\/h3>\n<p>Provavelmente haver\u00e1 muitas ocasi\u00f5es em que voc\u00ea enviar\u00e1 um commit e depois perceber\u00e1 que esqueceu de incluir algo importante. Com o Git, voc\u00ea pode alterar facilmente o commit para incluir o necess\u00e1rio.<\/p>\n<p>Para fazer isso:<\/p>\n<ul>\n<li>Primeiro, fa\u00e7a as altera\u00e7\u00f5es nos arquivos que voc\u00ea precisa para o projeto.<\/li>\n<li>Fa\u00e7a a prepara\u00e7\u00e3o t\u00edpica usando <code>git add<\/code>.<\/li>\n<li>Recomende essas altera\u00e7\u00f5es na \u00e1rea de teste usando um comando diferente para fazer a confirma\u00e7\u00e3o:<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">git commit --amend<\/code><\/pre>\n<p>Isso faz uma altera\u00e7\u00e3o no commit original com o novo, usando a sua \u00e1rea de teste para isso. Portanto, certifique-se de que n\u00e3o precisa mais da vers\u00e3o anterior do commit, pois ela ser\u00e1 perdida. Al\u00e9m disso, recomendamos o uso da op\u00e7\u00e3o <code>--amend<\/code> com commits locais em vez de commits remotos, pelos mesmos motivos que explicamos em outras partes deste artigo.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode usar <code>git commit --amend<\/code> para editar apenas a mensagem do commit com o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">git commit --amend -m \"New commit message\"\n<\/code><\/pre>\n<h3>5. Registro no Git<\/h3>\n<p>O uso do registro do Git \u00e9 valioso para ajudar voc\u00ea a entender o hist\u00f3rico de um reposit\u00f3rio. No entanto, n\u00e3o classificar\u00edamos o comando <code>git log<\/code> como avan\u00e7ado. Em vez disso, voc\u00ea pode usar <a href=\"https:\/\/git-scm.com\/docs\/git-log\" target=\"_blank\" rel=\"noopener noreferrer\">v\u00e1rias op\u00e7\u00f5es<\/a> para filtrar a sa\u00edda de acordo com suas necessidades:<\/p>\n<pre><code class=\"language-bash\">git log\n\ngit log --decorate\n\ngit log --stat<\/code><\/pre>\n<p>Por exemplo, ao adicionar decora\u00e7\u00f5es a uma entrada de registro, s\u00e3o impressos os nomes das refer\u00eancias para todos os commits exibidos. A op\u00e7\u00e3o\u00a0<code>--stat<\/code>\u00a0exibe as inser\u00e7\u00f5es e exclus\u00f5es em um commit:<\/p>\n<figure id=\"attachment_155612\" aria-describedby=\"caption-attachment-155612\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155612 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-log-stat.png\" alt=\"Executando um comando git log --stat no Terminal.\" width=\"1000\" height=\"651\"><figcaption id=\"caption-attachment-155612\" class=\"wp-caption-text\">Executando um comando git log &#8211;stat no Terminal.<\/figcaption><\/figure>\n<p>Voc\u00ea tamb\u00e9m pode usar outras op\u00e7\u00f5es para personalizar a sa\u00edda do registro, o que \u00e9 chamado de &#8220;limita\u00e7\u00e3o de commits.&#8221; Por exemplo, voc\u00ea pode usar os seguintes comandos:<\/p>\n<pre><code class=\"language-bash\">git log --author=&lt;author-name&gt;\n\ngit log --grep=&lt;pattern-string&gt;\n<\/code><\/pre>\n<p>Aqui, voc\u00ea pode filtrar o registro por nomes de autores espec\u00edficos ou padr\u00f5es de texto. Na verdade, voc\u00ea pode combinar v\u00e1rias op\u00e7\u00f5es e sinalizadores para gerar um registro para uma finalidade espec\u00edfica. Por exemplo, veja este comando:<\/p>\n<pre><code class=\"language-bash\">git log --oneline --author=&lt;author-name&gt; --since=&lt;date&gt; feature-temp\n<\/code><\/pre>\n<p>Isso busca todos os commits com a branch <strong>feature-temp <\/strong>de um \u00fanico autor desde uma data especificada, e ent\u00e3o os exibe usando entradas de linha \u00fanica. Observe que o par\u00e2metro <code>&lt;date&gt;<\/code> tamb\u00e9m pode ser uma string:<\/p>\n<pre><code class=\"language-bash\">--since=\u201dTwo weeks ago\u201d\n<\/code><\/pre>\n<p>Al\u00e9m disso, se quiser pesquisar um arquivo espec\u00edfico em vez de uma branch, voc\u00ea pode executar:<\/p>\n<pre><code class=\"language-bash\">git log --oneline --author=bartonfink --since=\u201d5 days ago\u201d -- readme.rm\n<\/code><\/pre>\n<p>Esse conjunto de exemplos apenas mostra a superf\u00edcie do que voc\u00ea pode fazer com seus registros, mas h\u00e1 muito espa\u00e7o para encontrar commits exatos dentro deles com base nos seus crit\u00e9rios de pesquisa.<\/p>\n<h3>6. Hooks do Git<\/h3>\n<p>Voc\u00ea provavelmente usa macros e outros scripts automatizados para executar o c\u00f3digo \u00e0s vezes. O Git tamb\u00e9m inclui esse tipo de funcionalidade na forma de hooks. Esses scripts s\u00e3o executados automaticamente em resposta a determinados eventos, como commits ou pushes. Existem tamb\u00e9m muitas maneiras de usar os hooks para refor\u00e7ar a formata\u00e7\u00e3o do c\u00f3digo, executar testes e muito mais.<\/p>\n<p>Existem dois tipos de hooks: no lado do cliente e no lado do servidor:<\/p>\n<ul>\n<li>Os hooks do lado do cliente s\u00e3o acionados com base em a\u00e7\u00f5es locais, como commits e merges.<\/li>\n<li>Os hooks do lado do servidor ser\u00e3o acionados devido a opera\u00e7\u00f5es de rede. Isso pode ocorrer quando um reposit\u00f3rio recebe um commit enviado, entre outros exemplos.<\/li>\n<\/ul>\n<p>O Git sempre preencher\u00e1 seu reposit\u00f3rio com v\u00e1rios exemplos de hooks assim que voc\u00ea executar um\u00a0\u00a0<code>git init<\/code>. No entanto, voc\u00ea precisa remover a extens\u00e3o <strong>.sample<\/strong> para poder us\u00e1-los:<\/p>\n<figure id=\"attachment_155615\" aria-describedby=\"caption-attachment-155615\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155615 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/sample-hooks.png\" alt=\"Uma pasta no macOS mostrando os hooks de exemplos que o Git instala na inicializa\u00e7\u00e3o.\" width=\"1000\" height=\"713\"><figcaption id=\"caption-attachment-155615\" class=\"wp-caption-text\">Uma pasta no macOS mostrando os hooks de exemplos que o Git instala na inicializa\u00e7\u00e3o.<\/figcaption><\/figure>\n<p>Observe que voc\u00ea s\u00f3 pode executar um tipo de hook por vez, embora seja poss\u00edvel usar v\u00e1rios scripts de uma s\u00f3 vez <a href=\"https:\/\/stackoverflow.com\/questions\/30104343\/multiple-git-hooks-for-the-same-trigger\" target=\"_blank\" rel=\"noopener noreferrer\">com algum trabalho adicional<\/a>. Dessa forma, os nomes dos arquivos devem corresponder ao tipo de hook que voc\u00ea gostaria de usar com base nos scripts de exemplo: <strong>pre-commit<\/strong>, <strong>update<\/strong> e assim por diante.<\/p>\n<h4>Criando um hook do Git<\/h4>\n<p>Para criar um hook do Git, voc\u00ea precisa criar um script execut\u00e1vel no subdiret\u00f3rio <strong>.git\/hooks <\/strong>sem uma extens\u00e3o. Ele ainda ser\u00e1 executado, desde que voc\u00ea o adicione \u00e0 pasta <strong>hooks<\/strong>.<\/p>\n<p>Voc\u00ea pode usar qualquer linguagem de script que desejar, desde que ela possa ser executada como um execut\u00e1vel. Sugerimos <a href=\"https:\/\/kinqsta.com\/pt\/blog\/ruby-on-rails-vs-node-js\/\" rel=\"noopener\">Ruby<\/a> ou <a href=\"https:\/\/kinqsta.com\/pt\/blog\/comandos-python\/\" rel=\"noopener\">Python<\/a>, mas voc\u00ea pode usar <a href=\"https:\/\/kinqsta.com\/pt\/blog\/linguagens-de-script\/\" rel=\"noopener\">Bash, Perl e muitas outras<\/a>. Tudo o que voc\u00ea precisa fazer aqui \u00e9 alterar o caminho para o seu interpretador do padr\u00e3o Bash:<\/p>\n<pre><code class=\"language-bash\">#!\/usr\/bin\/env python\n<\/code><\/pre>\n<p>A partir da\u00ed, voc\u00ea pode escrever seu c\u00f3digo normalmente. Por exemplo, aqui est\u00e1 um script <code>prepare-commit<\/code> em Python que solicita ao usu\u00e1rio que escreva boas mensagens de confirma\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-python\">#!\/usr\/bin\/env python\n\nimport sys, os\n\npath_commit_msg = sys.argv[1]\n\nwith open(commit_msg_filepath, 'w') as f:\n\nf.write(\"# You\u2019ll need to provide a better commit message than that, buddy!\")\n<\/code><\/pre>\n<p>Embora nem sempre seja necess\u00e1rio, recomendamos que voc\u00ea execute o <code>chmod +x .git\/hooks\/&lt;hook-name&gt;<\/code> na linha de comando para garantir que possa execut\u00e1-lo.<\/p>\n<p>De modo geral, os hooks podem ser uma ferramenta poderosa para automatizar tarefas repetitivas e aplicar pr\u00e1ticas recomendadas na sua equipe.<\/p>\n<h3>7. Refer\u00eancias de commits<\/h3>\n<p>No Git, voc\u00ea identifica os commits pelo <a href=\"https:\/\/kinqsta.com\/pt\/blog\/gerar-chaves-ssh\/\" rel=\"noopener\">hash de criptografia<\/a> SHA-1. Embora seja poss\u00edvel fazer refer\u00eancia aos commits pelo hash completo, isso pode ser tedioso e suscet\u00edvel a erros:<\/p>\n<pre><code class=\"language-bash\">bc7623b7a94ed3d8feaffaf7580df3eca4f5f5ca\n<\/code><\/pre>\n<p>Em vez disso, o Git oferece v\u00e1rias maneiras de voc\u00ea se referir aos commits usando nomes mais curtos e mais f\u00e1ceis de memorizar. Por exemplo, voc\u00ea pode usar um nome da branch ou tag. Por exemplo, considere uma branch chamada &#8220;develop&#8221;. Aqui est\u00e1 um exemplo em que nos referimos ao \u00faltimo commit nessa branch:<\/p>\n<pre><code class=\"language-bash\">git diff develop..HEAD\n<\/code><\/pre>\n<p>Isso mostra as diferen\u00e7as entre o \u00faltimo commit (<code>HEAD<\/code>) na branch &#8220;develop&#8221; e o commit atual.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode se referir a um commit por sua posi\u00e7\u00e3o relativa no hist\u00f3rico de commits. Por exemplo, voc\u00ea pode se referir a dois commits antes do atual usando a abrevia\u00e7\u00e3o <code>HEAD~2<\/code>:<\/p>\n<pre><code class=\"language-bash\">git diff HEAD~2..HEAD\n<\/code><\/pre>\n<p>O Git tamb\u00e9m oferece <a href=\"https:\/\/stackoverflow.com\/questions\/26785118\/head-vs-head-vs-head-also-known-as-tilde-vs-caret-vs-at-sign\" target=\"_blank\" rel=\"noopener noreferrer\">v\u00e1rias outras maneiras<\/a> de voc\u00ea se referir aos commits, como usar o s\u00edmbolo &#8220;@&#8221; para se referir ao branch atual ou usar o s\u00edmbolo &#8220;^&#8221; para se referir ao principal de um commit. Ao usar essas nota\u00e7\u00f5es abreviadas, voc\u00ea pode economizar tempo e evitar erros ao trabalhar com commits.<\/p>\n<h3>8. Stashing<\/h3>\n<p>Em circunst\u00e2ncias normais, voc\u00ea pensaria que n\u00e3o h\u00e1 como armazenar as altera\u00e7\u00f5es feitas nos arquivos sem fazer o commit. &#8220;Stashing&#8221; \u00e9 a maneira de voc\u00ea fazer isso temporariamente. \u00c9 \u00fatil quando voc\u00ea precisa trocar de branch ou trabalhar em uma tarefa diferente, mas n\u00e3o quer confirmar as altera\u00e7\u00f5es ainda.<\/p>\n<p>Por exemplo, se precisar trocar de branch para trabalhar em algo no meio do fluxo, voc\u00ea pode armazenar as altera\u00e7\u00f5es na branch atual e fazer o checkout da outra. A partir da\u00ed, voc\u00ea pode trabalhar na outra branch, fazer o commit e enviar essas altera\u00e7\u00f5es. Em seguida, voc\u00ea pode fazer o checkout e recuperar seu trabalho na branch original.<\/p>\n<p>Para armazenar as altera\u00e7\u00f5es, voc\u00ea pode fazer isso de duas maneiras:<\/p>\n<pre><code class=\"language-bash\">git stash\n<\/code><\/pre>\n<p>Isso armazena suas altera\u00e7\u00f5es em um novo stash e reverte seu diret\u00f3rio de trabalho para o \u00faltimo commit <strong>HEAD<\/strong> (o estado em que voc\u00ea tinha antes de fazer novas altera\u00e7\u00f5es). Voc\u00ea pode listar as altera\u00e7\u00f5es usando <code>git stash list<\/code> e inspecionar o stash usando <code>git stash show<\/code>. O \u00faltimo comando tamb\u00e9m aceita qualquer formato aceito pelo <code>git diff<\/code>.<\/p>\n<p>A partir daqui, voc\u00ea pode trocar de branch ou trabalhar em uma tarefa diferente. Quando voc\u00ea quiser recuperar suas altera\u00e7\u00f5es, execute o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">git stash apply\n<\/code><\/pre>\n<p>Isso aplicar\u00e1 as \u00faltimas altera\u00e7\u00f5es armazenadas ao seu diret\u00f3rio de trabalho. No entanto, observe que voc\u00ea ainda poder\u00e1 se deparar com conflitos se alterar demais o arquivo. Afinal de contas, <code>git stash<\/code> \u00e9 uma solu\u00e7\u00e3o tempor\u00e1ria para o problema que voc\u00ea est\u00e1 enfrentando.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode ter v\u00e1rios stashes e pode especificar qual stash aplicar usando o seguinte:<\/p>\n<pre><code class=\"language-bash\">git stash apply stash@{n}\n<\/code><\/pre>\n<p>O espa\u00e7o reservado <code>{n}<\/code> recebe um n\u00famero inteiro, e <code>stash@{0}<\/code> representa o \u00faltimo stash. A <a href=\"https:\/\/git-scm.com\/docs\/git-stash\" target=\"_blank\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o oficial do Git<\/a> inclui alguns outros exemplos de <code>git stash<\/code>.<\/p>\n<h3>9. Bissetriz<\/h3>\n<p>Com certeza voc\u00ea j\u00e1 se deparou com um <a href=\"https:\/\/kinqsta.com\/pt\/blog\/ferramentas-de-revisao-de-codigo\/\" rel=\"noopener\">bug ou um problema<\/a> e n\u00e3o tinha ideia por onde come\u00e7ar. Nessas situa\u00e7\u00f5es, a &#8220;bissetriz&#8221; pode ajudar voc\u00ea a identificar rapidamente o commit que introduziu o problema.<\/p>\n<p>Em resumo, o comando vasculha erros fazendo uma busca nos commits que voc\u00ea realizou. Se encontrar um commit com problema, ele vai te mostrar qual \u00e9. O que torna esse comando t\u00e3o \u00fatil s\u00e3o todos os subcomandos que voc\u00ea pode utilizar com ele.<\/p>\n<p>Para usar o bisecting, primeiro voc\u00ea precisa executar o comando <code>git bisect start<\/code>. O Git levar\u00e1 voc\u00ea ao primeiro commit no hist\u00f3rico do seu projeto.<\/p>\n<p>A partir da\u00ed, voc\u00ea precisa indicar se esse commit \u00e9 bom ou ruim usando os comandos relevantes:<\/p>\n<pre><code class=\"language-bash\">git bisect good\n\ngit bisect bad\n<\/code><\/pre>\n<p>O Git levar\u00e1 voc\u00ea para o pr\u00f3ximo commit para testar sua &#8220;qualidade&#8221; Observe que voc\u00ea tamb\u00e9m pode substituir &#8220;bom&#8221; por &#8220;antigo&#8221; e ruim por &#8220;novo&#8221; para corresponder ao seu caso de uso espec\u00edfico (embora n\u00e3o seja poss\u00edvel misturar os termos)<\/p>\n<p>A partir daqui, voc\u00ea pode continuar a marcar cada commit como bom ou ruim at\u00e9 encontrar o commit que introduziu o bug. No entanto, voc\u00ea n\u00e3o precisa percorrer todos os commits &#8211; \u00e9 poss\u00edvel especificar identificadores exatos para restringir e encurtar a pesquisa:<\/p>\n<pre><code class=\"language-bash\">git bisect bad feature-test\n<\/code><\/pre>\n<p>Aqui, voc\u00ea usa o nome de um branch, mas poderia ser uma revis\u00e3o espec\u00edfica usando um n\u00famero inteiro, uma refer\u00eancia de hash e muito mais. Independentemente disso, ap\u00f3s procurar e encontrar o bug, voc\u00ea pode executar um dos seguintes comandos para voltar ao seu c\u00f3digo mais recente:<\/p>\n<pre><code class=\"language-bash\">git bisect reset\n<\/code><\/pre>\n<p>Como acontece com todos os comandos avan\u00e7ados do Git nesta lista, existe muito mais a ser analisado, e a <a href=\"https:\/\/git-scm.com\/docs\/git-bisect\" target=\"_blank\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o do Git<\/a> ser\u00e1 uma leitura essencial para voc\u00ea.<\/p>\n<h3>10. Compara\u00e7\u00e3o de branches<\/h3>\n<p>Nossa entrada sobre refer\u00eancias de commit fala sobre o uso do <code>git diff<\/code>. Agora, \u00e9 hora de analisar isso com mais detalhes. Muitas vezes voc\u00ea ter\u00e1 v\u00e1rias branches que cont\u00eam altera\u00e7\u00f5es diferentes. O Git permite que voc\u00ea compare as diferen\u00e7as entre duas branches usando o comando <code>git diff<\/code>. Na verdade, voc\u00ea pode us\u00e1-lo de v\u00e1rias maneiras, muitas vezes em conjunto com outros comandos, para investigar e analisar um reposit\u00f3rio.<\/p>\n<p>O comando b\u00e1sico <code>git diff<\/code> fornecer\u00e1 a voc\u00ea um resultado com uma vis\u00e3o geral das altera\u00e7\u00f5es. Ele se parece muito com o resultado de uma investiga\u00e7\u00e3o de mesclagem de confirma\u00e7\u00e3o:<\/p>\n<figure id=\"attachment_155611\" aria-describedby=\"caption-attachment-155611\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155611 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-diff-output.png\" alt=\"Mostrando a sa\u00edda de uma solicita\u00e7\u00e3o de git diff.\" width=\"1000\" height=\"540\"><figcaption id=\"caption-attachment-155611\" class=\"wp-caption-text\">Mostrando a sa\u00edda de uma solicita\u00e7\u00e3o de git diff.<\/figcaption><\/figure>\n<p>No entanto, voc\u00ea pode detalhar as branches exatas, os hashes e muito mais. Por exemplo, para comparar duas branches, voc\u00ea executa o comando <code>git diff branch1..branch2<\/code> e substitui os espa\u00e7os reservados:<\/p>\n<pre><code class=\"language-bash\">git diff feature-branch pre-prod\n<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m pode comparar as diferen\u00e7as entre a branch atual e outra branch:<\/p>\n<pre><code class=\"language-bash\">git diff HEAD..pre-prod\n<\/code><\/pre>\n<p>Observe que o uso de dois pontos aqui mostrar\u00e1 a diferen\u00e7a entre os pontos finais das duas branches. Em contrapartida, o uso de tr\u00eas pontos retornar\u00e1 a diferen\u00e7a entre o antecessor comum das duas branches e usar\u00e1 isso para o teste.<\/p>\n<p>Assim como em <code>git log<\/code>, voc\u00ea pode limpar a sa\u00edda e refinar o que ela retorna. Por exemplo, o <code>git diff --name-only branch1..branch2<\/code> verificar\u00e1 apenas quais arquivos diferem e deixar\u00e1 de fora o contexto:<\/p>\n<figure id=\"attachment_155610\" aria-describedby=\"caption-attachment-155610\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155610 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-diff-name-only.png\" alt=\"Executando um comando git diff --name-only no Terminal.\" width=\"1000\" height=\"487\"><figcaption id=\"caption-attachment-155610\" class=\"wp-caption-text\">Executando um comando git diff &#8211;name-only no Terminal.<\/figcaption><\/figure>\n<p>Voc\u00ea pode achar que a sa\u00edda \u00e9 dif\u00edcil de analisar, especialmente se o &#8220;diff&#8221; for longo. Nesses casos, voc\u00ea pode usar a op\u00e7\u00e3o <code>--color-words<\/code>:<\/p>\n<figure id=\"attachment_155609\" aria-describedby=\"caption-attachment-155609\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155609 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-diff-color-words.png\" alt=\"Executando o comando git diff --color-words e visualizando a sa\u00edda no Terminal.\" width=\"1000\" height=\"636\"><figcaption id=\"caption-attachment-155609\" class=\"wp-caption-text\">Executando o comando git diff &#8211;color-words e visualizando a sa\u00edda no Terminal.<\/figcaption><\/figure>\n<p>Em geral, o <code>git diff<\/code> pode ser t\u00e3o poderoso quanto outros comandos, especialmente quando voc\u00ea invoca determinadas op\u00e7\u00f5es e refina as diferen\u00e7as que retorna.<\/p>\n<h3>11. Aplicando commits individuais<\/h3>\n<p>\u00c0s vezes, voc\u00ea pode querer aplicar um commit espec\u00edfico de uma branch para outra sem mesclar as duas branches. O Git permite que voc\u00ea fa\u00e7a isso usando <code>git cherry-pick<\/code>. Voc\u00ea deve usar isso com cuidado, mas saiba que o <code>git cherry-pick<\/code> pode ajud\u00e1-lo em alguns cen\u00e1rios.<\/p>\n<p>Uma situa\u00e7\u00e3o \u00e9 quando voc\u00ea tem branches de recursos desatualizados que n\u00e3o s\u00e3o mesclados em <code>main<\/code> ou <code>trunk<\/code>. Voc\u00ea pode usar uma combina\u00e7\u00e3o de comandos (como <code>git log<\/code>) para extrair commits antigos relevantes e reaplic\u00e1-los em outro lugar.<\/p>\n<p>Use o registro git para encontrar a refer\u00eancia de um commit. A partir da\u00ed, certifique-se de que voc\u00ea est\u00e1 na branch para a qual gostaria de selecionar uma refer\u00eancia. Por exemplo, suponha que voc\u00ea queira selecionar o commit <code>xxxxxaaaaaa<\/code> na branch &#8220;<code>trunk<\/code>&#8220;. Primeiro, fa\u00e7a o checkout da sua branch.<\/p>\n<pre><code class=\"language-bash\">git checkout trunk\n<\/code><\/pre>\n<p>&#8230;e depois fa\u00e7a o cherry-pick do seu commit:<\/p>\n<pre><code class=\"language-bash\">git cherry-pick xxxxxaaaaaa\n<\/code><\/pre>\n<p>Sua mensagem de confirma\u00e7\u00e3o estar\u00e1 provavelmente desatualizada em muitas ocasi\u00f5es. Para resolver isso, voc\u00ea pode passar a op\u00e7\u00e3o <code>--edit<\/code> para o comando. Isso permitir\u00e1 que voc\u00ea forne\u00e7a uma nova mensagem de confirma\u00e7\u00e3o antes de fazer o cherry-pick.<\/p>\n<h3>12. Melhorando o &#8216;git add&#8217;<\/h3>\n<p>Para o nosso \u00faltimo comando avan\u00e7ado do Git, mostraremos o <code>git add<\/code>. Este comando fundamental do Git possui algumas capacidades surpreendentes.<\/p>\n<p>Por exemplo, se voc\u00ea estiver adicionando arquivos individuais \u00e0 \u00e1rea de teste, poder\u00e1 usar o seguinte:<\/p>\n<pre><code class=\"language-bash\">git add -p\n<\/code><\/pre>\n<p>A op\u00e7\u00e3o <code>-p<\/code> permite que voc\u00ea prepare as altera\u00e7\u00f5es de forma interativa. Voc\u00ea pode revisar as altera\u00e7\u00f5es feitas em cada arquivo e, em seguida, escolher quais ser\u00e3o preparadas. Isso pode economizar muito tempo e ajudar voc\u00ea a evitar a prepara\u00e7\u00e3o de uma altera\u00e7\u00e3o indesejada.<\/p>\n<p>Embora voc\u00ea saiba que pode preparar arquivos individuais, tamb\u00e9m \u00e9 poss\u00edvel especificar um diret\u00f3rio. Por exemplo, para preparar todos os arquivos no diret\u00f3rio &#8220;<code>new-feature<\/code>&#8220;, voc\u00ea pode especificar um diret\u00f3rio:<\/p>\n<pre><code class=\"language-bash\">git add new-feature\n<\/code><\/pre>\n<p>Voc\u00ea pode at\u00e9 querer ver qual ser\u00e1 o resultado de um <code>git add<\/code> sem executar o processo por completo. Voc\u00ea tem uma op\u00e7\u00e3o para isso:<\/p>\n<pre><code class=\"language-bash\">git add --dry-run\n\ngit add -n\n<\/code><\/pre>\n<p>Quando voc\u00ea executar isso, o Git mostrar\u00e1 se ir\u00e1 adicionar ou ignorar os arquivos. Por falar em arquivos ignorados, voc\u00ea tamb\u00e9m pode adicion\u00e1-los ao ambiente de teste, se desejar:<\/p>\n<pre><code class=\"language-bash\">git add --force\n\ngit add -f\n<\/code><\/pre>\n<p>Em termos simples, adicionar arquivos ao ambiente de teste n\u00e3o \u00e9 apenas uma quest\u00e3o de &#8220;adicionar ou n\u00e3o adicionar&#8221;. Por isso, um dos comandos mais importantes do Git \u00e9 vers\u00e1til o suficiente para lidar com diversas situa\u00e7\u00f5es diferentes.<\/p>\n<h2>Resumo<\/h2>\n<p>Uma vez que voc\u00ea domine os comandos b\u00e1sicos do <a href=\"https:\/\/git-scm.com\/\">Git<\/a>, ter\u00e1 80% do que precisa para executar as tarefas regulares de controle de vers\u00e3o em seu projeto. No entanto, \u00e9 nos \u00faltimos 20% que os comandos avan\u00e7ados do Git podem realmente se destacar.<\/p>\n<p>Comandos e t\u00e9cnicas como rebasing, bisecting, restaura\u00e7\u00e3o de arquivos e outros podem ajud\u00e1-lo a sair de situa\u00e7\u00f5es complicadas rapidamente. Al\u00e9m disso, voc\u00ea pode oferecer um valor significativo \u00e0 sua equipe e projeto, ajudando a otimizar fluxos de trabalho, aumentar a produtividade e ter um impacto mais amplo como desenvolvedor.<\/p>\n<p>Pretende usar alguns desses comandos avan\u00e7ados do Git no seu dia a dia? Compartilhe conosco na \u00e1rea de coment\u00e1rios abaixo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Git \u00e9 uma ferramenta poderosa para controle de vers\u00e3o e tem presen\u00e7a dominante nesta \u00e1rea. Para a maioria das tarefas do dia a dia, o &#8230;<\/p>\n","protected":false},"author":199,"featured_media":60509,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[969],"class_list":["post-60508","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico\" \/>\n<meta property=\"og:description\" content=\"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-26T15:46:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-31T08:52:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico\",\"datePublished\":\"2023-10-26T15:46:56+00:00\",\"dateModified\":\"2023-10-31T08:52:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\"},\"wordCount\":3878,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\",\"name\":\"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg\",\"datePublished\":\"2023-10-26T15:46:56+00:00\",\"dateModified\":\"2023-10-31T08:52:59+00:00\",\"description\":\"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinqsta.com\/pt\/topicos\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico - Kinsta\u00ae","description":"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/","og_locale":"pt_PT","og_type":"article","og_title":"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico","og_description":"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!","og_url":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-10-26T15:46:56+00:00","article_modified_time":"2023-10-31T08:52:59+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!","twitter_image":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico","datePublished":"2023-10-26T15:46:56+00:00","dateModified":"2023-10-31T08:52:59+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/"},"wordCount":3878,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/","url":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/","name":"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg","datePublished":"2023-10-26T15:46:56+00:00","dateModified":"2023-10-31T08:52:59+00:00","description":"O Git pode ser simples de usar, mas \u00e9 um sistema de controle de vers\u00e3o complexo. Este artigo explorar\u00e1 alguns comandos avan\u00e7ados do Git para usu\u00e1rios experientes!","breadcrumb":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#primaryimage","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/advanced-git.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/pt\/blog\/git-avancado\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinqsta.com\/pt\/topicos\/git\/"},{"@type":"ListItem","position":3,"name":"Git Avan\u00e7ado: Comandos Poderosos Al\u00e9m do B\u00e1sico"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/pt\/#website","url":"https:\/\/kinqsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinqsta.com\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/60508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/comments?post=60508"}],"version-history":[{"count":10,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/60508\/revisions"}],"predecessor-version":[{"id":64465,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/60508\/revisions\/64465"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/translations\/es"},{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60508\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media\/60509"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media?parent=60508"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/tags?post=60508"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/topic?post=60508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}