Limpe o histórico do seu ramo antes de se comprometer.

Você faz uma pequena alteração no código, mas ela está incompleta; não compila ou implementa totalmente o recurso que você deseja. Você quer salvar seu trabalho e tentar algo, mas não quer seu histórico repleto de commits pequenos ou incorretos. Comprometa-se assim mesmo! Você pode juntar vários commits para tornar seu log mais breve.

Quando terminar de usar o recurso, execute

$ git rebase -i <master/develop/other>

O -i significa interativo e exibe a tela seguinte:

pick 9977ead Commit 2+1/2
pick e1f203f
Commit 2+2/2
pick
1a07d53 Commit 3

## Below this is what git added to the file.
# Rebase 17a84ad..1a07d53 onto 17a84ad
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.

Eu fiz um pequeno repositório com 4 commits, porém o primeiro não é mostrado porque estou rebasing nele. Eu quero esmagar os commits 2 + 1/2 e 2 + 2/2 juntos, então reescrever o terceiro commit, então eu mudo para este:

pick 9977ead Commit 2+1/2
squash e1f203f
Commit 2+2/2
reword
1a07d53 Commit 3

squash diz ao git para combinar o commit com o que está acima dele. Se eu quisesse esmagar todos os commits, poderia apenas alterar a reformulação para squash também. Git pode esmagar quantos commits consecutivos você quiser. reformular apenas permite que você edite a mensagem de confirmação.

Depois de salvar e sair do editor, o git esmagará automaticamente os commits e permitirá que você edite a mensagem.

# This is a combination of 2 commits.
# The first commit's message is:

Commit 2+1/2

# This is the 2nd commit message:

Commit 2+2/2

Como eu especifiquei uma reformulação para o último commit, git imediatamente salta para o que basicamente equivale a um commit git –amend (já que este commit está no topo). Agora, posso me fundir com o master, ou qualquer branch de minha escolha, e fazer isso com uma história limpa e elegante.

Sabendo que o git permite editar seu histórico, nunca se deve ter medo de salvar seu código. Nunca se deve pensar em como eles querem gerenciar sua árvore quando deveriam estar codificando. Até mesmo escrever uma mensagem de confirmação detalhada pode ser atrasado para manter o ritmo ou fluxo de alguém.

Alternativamente, pode-se usar git commit –amend freqüentemente para adicionar pequenas mudanças incrementais, no entanto, isso não oferece o mesmo poder de rebase.