Geralmente, git rebase
é usado para:
- Editar mensagens anteriores do commit
- Combinar vários commits em um
- Excluir ou reverter commits que não são mais necessários
Aviso: como a alteração do histórico de commits pode dificultar a vida de outras pessoas que usam o repositório, não é uma boa ideia fazer rebase de commits quando você já fez push em um repositório. Para saber como fazer rebase com segurança no sua instância do GitHub Enterprise Server, consulte "Sobre merges de pull request".
Fazer rebase de commits em um branch
Para 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):
$ git rebase --interactive other_branch_name
Fazer rebase de commits em um momento específico
Para fazer rebase dos últimos commits em seu branch atual, você pode inserir o seguindo comando no shell:
$ git rebase --interactive HEAD~7
Comandos disponíveis ao fazer rebase
Há seis comandos disponíveis para fazer rebase:
pick
pick
simplesmente significa que o commit está incluído. Reorganizar a ordem depick
dos comandos altera a ordem dos commits quando o rebase está em andamento. Se você optar por não incluir um commit, será preciso excluir a linha toda.reword
- O comando
reword
é semelhante apick
, mas depois que você o usa, o processo de rebase pausa e dá a chance de você alterar a mensagem do commit. As alterações feitas pelo commit não são afetadas. edit
- Se optar por editar (
edit
) um commit, você terá a chance de corrigi-lo, o que significa que será possível adicionar ou alterar o commit por inteiro. 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. combinação por squash
- 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.
fixup
- Esse comando é semelhante ao
squash
, mas o commit a sofrer merge tem sua mensagem descartada. O commit simplesmente sofre merge no commit acima dele, e a mensagem do commit anterior é usado para descrever ambas as alterações. exec
- Permite que você execute comandos de shell arbitrários em um commit.
Um exemplo de uso de git rebase
Não importa o comando a ser usado, o Git iniciará seu editor de texto padrão e abrirá um arquivo que detalha os commits no intervalo escolhido. Esse arquivo é parecido com este:
pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B
# Rebase 41a72e6..7b36971 onto 41a72e6
#
# Comandos:
# p, pick = usar commit
# r, reword = usar commit, mas editar a mensagem do commit
# e, edit = usar commit, mas interromper para correção
# s, squash = usar commit, mas juntar no commit anterior
# f, fixup = como "squash", mas descartar mensagem de log desse commit
# x, exec = executar comando (o restante da linha) usando shell
#
# Se você remover uma linha aqui ESSE COMMIT SERÁ PERDIDO.
# No entanto, se você remover tudo, o rebase será anulado.
#
Ao dividir essas informações, de cima para baixo, observamos que:
- 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.
- Os commits escolhidos para rebase são classificados na ordem das alterações mais antigas (no topo) para as mais recentes (na base).
- Cada linha lista um comando (por padrão,
pick
), o SHA do commit e a mensagem do commit. Todo o procedimento degit rebase
gira em torno da manipulação dessas três colunas. As alterações feitas são passadas por rebase ao seu repositório. - Depois dos commits, o Git informa a você o intervalo de commits com os quais estamos trabalhando (
41a72e6..7b36971
). - Por fim, o Git fornece alguma ajuda informando a você os comandos que estão disponíveis ao fazer rebase dos commits.
Leia mais
- "Usar o Git rebase"
- O capítulo "Git Branching" no livro do Pro Git
- O capítulo "Interactive Rebasing" no livro do Pro Git
- "Combinar commits por squash com rebase"
- "Sincronizar seu branch" na documentação do GitHub Desktop