{"meta":{"title":"Sobre a troca de base do Git","intro":"O comando git rebase permite alterar com facilidade uma variedade de commits, modificando o histórico do seu repositório. É possível reordenar, editar ou combinar commits por squash.","product":"Introdução","breadcrumbs":[{"href":"/pt/get-started","title":"Introdução"},{"href":"/pt/get-started/using-git","title":"Usar o Git"},{"href":"/pt/get-started/using-git/about-git-rebase","title":"Sobre a troca de base do Git"}],"documentType":"article"},"body":"# Sobre a troca de base do Git\n\nO comando git rebase permite alterar com facilidade uma variedade de commits, modificando o histórico do seu repositório. É possível reordenar, editar ou combinar commits por squash.\n\nNormalmente, você usará `git rebase` para:\n\n* Editar mensagens de commits anteriores\n* Combinar múltiplos commits em um único\n* Excluir ou reverter commits que não são mais necessários\n\n> \\[!WARNING]\n> Como alterar seu histórico de commits pode dificultar as coisas para todos os outros usuários do repositório, é considerado uma prática inadequada fazer rebase de commits depois de já ter enviado para um repositório. Para saber como trocar de base com segurança, confira [Fusão de Pull Requests](/pt/pull-requests/reference/pull-request-merges).\n\n## Fazer rebase de commits em um branch\n\nPara fazer rebase de todos os commits entre outro branch e o estado do branch atual, você pode inserir o seguinte comando no shell (ou o prompt de comando para Windows, ou o terminal para Mac e Linux):\n\n```shell\ngit rebase --interactive OTHER-BRANCH-NAME\n```\n\n## Fazer rebase de commits em um momento específico\n\nPara fazer rebase dos últimos commits em seu branch atual, você pode inserir o seguindo comando no shell:\n\n```shell\ngit rebase --interactive HEAD~7\n```\n\n## Comandos disponíveis ao fazer rebase\n\nHá seis comandos disponíveis para fazer rebase:\n\n<dl>\n<dt><code>pick</code></dt>\n<dd>\n<code>pick</code> significa simplesmente que o commit está incluído. A reorganização da ordem dos comandos <code>pick</code> altera a ordem dos commits quando a troca de base está em andamento. Se você optar por não incluir um commit, será preciso excluir a linha toda. </dd>\n\n<dt><code>reword</code></dt>\n<dd>O comando <code>reword</code> é semelhante a <code>pick</code>, mas depois que você usá-lo, o processo de troca de base será colocado em pausa e dará a você a chance de alterar a mensagem de commit. As alterações feitas pelo commit não são afetadas. </dd>\n\n<dt><code>edit</code></dt>\n<dd>Se você optar por <code>edit</code> um commit, terá a chance de alterar o commit, o que significa que pode adicionar ou alterar o commit por completo. Também é possível fazer mais commits antes de continuar com o rebase. Isso permite que você divida um commit grande em commits menores ou remova alterações equivocadas feitas em um commit. </dd>\n\n<dt><code>squash</code></dt>\n<dd>Esse comando permite combinar dois ou mais commits em um único commit. Um commit é combinado por squash no commit acima dele. O Git permite que você grave uma nova mensagem do commit descrevendo ambas as alterações.</dd>\n\n<dt><code>fixup</code></dt>\n<dd>Isso é semelhante a <code>squash</code>, mas o commit a ser mesclado tem a mensagem descartada. O commit simplesmente sofre merge no commit acima dele, e a mensagem do commit anterior é usado para descrever ambas as alterações.</dd>\n\n<dt><code>exec</code></dt>\n<dd>Permite que você execute comandos de shell arbitrários num commit.</dd>\n</dl>\n\n## Um exemplo de uso de `git rebase`\n\nIndependentemente do comando usado, o Git iniciará [o editor de texto padrão](/pt/get-started/git-basics/associating-text-editors-with-git) e abrirá um arquivo que fornece detalhes dos commits no intervalo escolhido. Esse arquivo é parecido com este:\n\n```text\npick 1fc6c95 Patch A\npick 6b2481b Patch B\npick dd1475d something I want to split\npick c619268 A fix for Patch B\npick fa39187 something to add to patch A\npick 4ca2acc i cant' typ goods\npick 7b36971 something to move before patch B\n\n# Rebase 41a72e6..7b36971 onto 41a72e6\n#\n# Commands:\n#  p, pick = use commit\n#  r, reword = use commit, but edit the commit message\n#  e, edit = use commit, but stop for amending\n#  s, squash = use commit, but meld into previous commit\n#  f, fixup = like \"squash\", but discard this commit's log message\n#  x, exec = run command (the rest of the line) using shell\n#\n# If you remove a line here THAT COMMIT WILL BE LOST.\n# However, if you remove everything, the rebase will be aborted.\n#\n```\n\nAo dividir essas informações, de cima para baixo, observamos que:\n\n* Sete commits são listados, o que indica que houve sete alterações entre nosso ponto de partida e o estado do nosso branch atual.\n* Os commits escolhidos para rebase são classificados na ordem das alterações mais antigas (no topo) para as mais recentes (na base).\n* Cada linha lista um comando (por padrão, `pick`), o SHA do commit e a mensagem de commit. Todo o procedimento `git rebase` gira em torno da manipulação dessas três colunas. As alterações feitas tem a *base trocada* no repositório.\n* Após os commits, o Git informa o intervalo de commits com o qual estamos trabalhando (`41a72e6..7b36971`).\n* Por fim, o Git fornece alguma ajuda informando a você os comandos que estão disponíveis ao fazer rebase dos commits.\n\n## Leitura adicional\n\n* [Usar rebase do Git na linha de comando](/pt/get-started/using-git/using-git-rebase-on-the-command-line)\n* [O capítulo \"Ramificação do Git\" do *livro Pro Git*](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)\n* [O capítulo \"Troca de base interativa\" do *livro Pro Git*](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple)\n* [Mesclagem squash de commits com a troca de base](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)\n* [Sincronizar seu ramo no GitHub Desktop](/pt/desktop/working-with-your-remote-repository-on-github-or-github-enterprise/syncing-your-branch-in-github-desktop) na GitHub Desktop documentação"}