Nota: No debe cambiar las confirmaciones que se han enviado a otro repositorio de ninguna manera a menos que conozca las consecuencias .
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
(poner VIM en modo de inserción)
Cambie la lista para que se vea así (no tiene que eliminar ni incluir el mensaje de confirmación). ¡No escribas mal squash
! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Escriba Escluego ZZ
(Guardar y salir de 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
Cambie el texto a cómo desea que se vea el nuevo mensaje de confirmación. Recomiendo que esta sea una descripción de los cambios en commit A
y D
:
new_commit_message_for_A_and_D
Escribe EscentoncesZZ
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)
Ahora ha creado una nueva confirmación E
. Se compromete A
y D
ya no está en su historia, pero no se ha ido. Todavía puede recuperarlos en este momento y durante un tiempo git rebase --hard D
(¡ git rebase --hard
destruirá cualquier cambio local! ).