Remarque: vous ne devez en aucun cas modifier les commits qui ont été transférés vers un autre dépôt, sauf si vous en connaissez les conséquences .
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
Type i(Mettre VIM en mode insertion)
Modifiez la liste pour qu'elle ressemble à ceci (vous n'avez pas à supprimer ou à inclure le message de validation). Ne vous trompez pas squash! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Tapez Escensuite ZZ(Enregistrer et quitter 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
Type i
Remplacez le texte par ce à quoi vous voulez que le nouveau message de validation ressemble. Je recommande que ce soit une description des changements dans commit Aet D:
new_commit_message_for_A_and_D
Tapez EscalorsZZ
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)
Vous avez maintenant créé un nouveau commit E. S'engage Aet Dne font plus partie de votre histoire mais ne sont pas partis. Vous pouvez toujours les récupérer à ce stade et pendant un certain temps git rebase --hard D( git rebase --harddétruira toutes les modifications locales! ).