Git commit --amend

Leia em: 2 minutos

O trabalho principal do Git é garantir que nenhuma informação seja perdida. Ele foi projetado para fornecer total liberdade no fluxo de trabalho. Isso significa que podemos ter a liberdade para definir o que queremos em nosso histórico de commits.

Para que isto seja possível o Git oferece um comando para reescrever os commits anteriores. Neste tutorial irei discutir o principal motivo para se reescrever a história de um commit, juntamente com algumas dicas.

Discussão

É bem comum esquecer de adicionar alguma informação/arquivo no commit ou submeter um commit com uma mensagem errada. A flag --amend é o jeito mais conveniente de voltar atrás e corrigir isto sem muito esforço.

Reescrevendo a história

git add .
git commit --amend
git push origin -f <your_branch>

Essa técnica combina o envio de conteúdos que ainda não foram adicionados ao Git utilizando o último commit ao invés de criar uma nova snapshot, tendo a possibilidade de alteração da messagem do commit anterior.

Exemplo

Vejamos o exemplo abaixo, o cenário onde ocorre é em development. Suponhamos que foi criado dois arquivos, mas na hora de adicionar ao Git um dos arquivos foram esquecidos.

A solução foi utilizar a flag --amend.

# Criou foo.rb e bar.rb mas adicionou somente o foo.rb e commitou
touch foo.rb bar.rb

git add foo.rb
git commit

# Adicionou as mudanças esquecidas de bar.rb fez o amend e commitou
git add bar.rb
git commit --amend --no-edit
git push origin -f any_branch

O resultado disso é fazer com que as alterações atuais façam parte do commit anterior.

A flag --no-edit tira a possilidade de editar da mensagem do commit; caso ao contrário o editor padrão é aberto com a mensagem do commit anterior. Nesta etapa existe a possilidade de alteração da mensagem.

Dica

Estes três comandos de: adicionar, amend e commit, podem serem resumidos em apenas um comando. Para que isto seja possível é necessário inserir um arquivo de bash que fiz dentro da pasta binária de seu sistema:

Se for Mac

sudo wget -O /bin/git-amend https://gist.githubusercontent.com/SauloSilva/372f77fecfce995715d6/raw/25b4da0cbbf4a81cd30aa40e9adb24678f23fbdc/git-amend
sudo chmod +x /bin/git-amend

Se for Linux

sudo wget -O /usr/bin/git-amend https://gist.githubusercontent.com/SauloSilva/372f77fecfce995715d6/raw/25b4da0cbbf4a81cd30aa40e9adb24678f23fbdc/git-amend
sudo chmod +x /usr/bin/git-amend

Da próxima vez que precisar fazer um amend é so executar:

git amend

ou

git amend --no-edit

Simples não!?

Não use o amend para commits públicos

Não podemos utililizar o amend para resetar commits de outros desenvolvedores.

Commit alterado é considerado um commit novo. Por isso tome cuidado antes de executar este comando, pois você pode estar prejudicando outros desenvolvedores que estam se baseando no commit alterado. Isto pode gerar confusões e vários problemas difíceis de se reverterem.

Veja mais posts sobre:
git

Comentários:

Deixe sua dúvida, sugestão ou crítica, estou ansioso para saber tudo o que você achou sobre este post:
Saulo Santiago