Nota: Você não deve alterar confirmações que foram enviadas para outro repositório de forma alguma, a menos que conheça as consequências .
git log --oneline -4
D commit_message_for_D
C commit_message_for_C
B commit_message_for_B
A commit_message_for_A
git rebase --interactive
pick D commit_message_for_D
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
Tipo i
(Coloque o VIM no modo de inserção)
Altere a lista para ficar assim (você não precisa remover ou incluir a mensagem de confirmação). Não cometa erros ortográficos squash
! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Digite Escthen ZZ
(Salvar e sair do VIM)
# This is a combination of 2 commits.
# The first commit's message is:
commit_message_for_D
# This is the 2nd commit message:
commit_message_for_A
Tipo i
Altere o texto para o que você deseja que a nova mensagem de confirmação seja exibida. Eu recomendo que seja uma descrição das alterações no commit A
e D
:
new_commit_message_for_A_and_D
Digite EscentãoZZ
git log --oneline -4
E new_commit_message_for_A_and_D
C commit_message_for_C
B commit_message_for_B
git show E
(You should see a diff showing a combination of changes from A and D)
Você criou um novo commit E
. Confirma A
e D
não está mais em sua história, mas não se foi. Você ainda pode recuperá-los neste momento e por um tempo git rebase --hard D
( git rebase --hard
irá destruir as alterações locais! ).