Nota: non è necessario modificare gli commit che sono stati trasferiti in un altro repository in alcun modo se non si conoscono le conseguenze .
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
(Metti VIM in modalità inserimento)
Modificare l'elenco in questo modo (non è necessario rimuovere o includere il messaggio di commit). Non sbagliare squash
! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Digita Escquindi ZZ
(Salva ed esci da 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
genere i
Cambia il testo in quello che vuoi che assomigli al nuovo messaggio di commit. Raccomando che questa sia una descrizione delle modifiche in commit A
e D
:
new_commit_message_for_A_and_D
Digita EscquindiZZ
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)
Ora hai creato un nuovo commit E
. Si impegna A
e D
non è più nella tua storia ma non se ne sono andati. Puoi ancora recuperarli a questo punto e per un po 'di tempo git rebase --hard D
( git rebase --hard
distruggerà eventuali modifiche locali! ).