Hinweis: Sie sollten Commits, die auf ein anderes Repo verschoben wurden, in keiner Weise ändern, es sei denn, Sie kennen die Konsequenzen .
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
Typ i
(VIM in den Einfügemodus versetzen)
Ändern Sie die Liste so, dass sie so aussieht (Sie müssen die Festschreibungsnachricht nicht entfernen oder einschließen). Nicht falsch schreiben squash
! ::
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Geben Sie Escdann ZZ
(Speichern und Beenden von VIM) ein.
# 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
Art i
Ändern Sie den Text so, wie die neue Festschreibungsnachricht aussehen soll. Ich empfehle eine Beschreibung der Änderungen im Commit A
und D
:
new_commit_message_for_A_and_D
Geben Sie Escdann einZZ
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)
Sie haben jetzt ein neues Commit erstellt E
. Commits A
und D
sind nicht mehr in Ihrer Geschichte, aber nicht weg. Sie können sie zu diesem Zeitpunkt noch für eine Weile wiederherstellen git rebase --hard D
( git rebase --hard
zerstört alle lokalen Änderungen! ).