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 Aund 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 Aund Dsind 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 --hardzerstört alle lokalen Änderungen! ).