Not: Sonuçları bilmediğiniz sürece başka bir repoya itilmiş olan taahhütleri hiçbir şekilde değiştirmemelisiniz .
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
Tip i(VIM'i ekleme moduna getirin)
Listeyi şu şekilde görünecek şekilde değiştirin (İşleme iletisini kaldırmanız veya eklemeniz gerekmez). Yanlış yazmayın squash! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Tür Escsonra ZZ(Kaydet ve çıkış 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
tip i
Metni, yeni yürütme iletisinin görünmesini istediğiniz şekilde değiştirin. Bunu taahhüt değişikliklerin bir açıklamadan ibaret tavsiye Ave D:
new_commit_message_for_A_and_D
Tür EscsonraZZ
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)
Şimdi yeni bir taahhüt oluşturdunuz E. Taahhüt eder Ave Dartık geçmişinizde değildir ancak gitmez. Bu noktada ve bir süre için onları kurtarabilirsiniz git rebase --hard D( git rebase --hardyerel değişiklikleri yok edeceksiniz! ).