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 A
et 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 A
et D
ne 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 --hard
détruira toutes les modifications locales! ).