Sie suchen den git rebase
Befehl. Für den einfachen Fall, tun
git checkout D
git rebase F
Alternativ tun
git rebase D F
Dies wird nicht in einem einzigen begehen zerquetschen. Um das zu tun, wahrscheinlich die am wenigsten fehleranfällige Option zu tun, eine interaktive begehen:
git checkout D
git rebase -i F
Dies wird einen Editor mit den Commits in D
zeigen, die indexiert werden werden. Es wird wie folgt aussehen:
pick 293a24d Some commit message
pick a015bbe Some commit message
pick e19f4fa Some commit message
pick 40ae959 Some commit message
pick fba6b72 Some commit message
# Rebase 419206d..fba6b72 onto de95063
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Folgen Sie den Anweisungen und alle, aber die erste Zeile ändern mit squash
statt pick
zu starten. Dadurch haben Sie die Möglichkeit, die Nachrichten nach dem Speichern zusammenzuführen und den Editor zu schließen.
Alternativ können Sie die Passungen zu reword
und die restlichen zu fixup
ändern. Dies zeigt Ihnen nur die erste Commit-Nachricht. Diese Option ist einfacher, wenn Sie alle alten Commit-Nachrichten vollständig wegwerfen möchten.
Schließlich, wenn Sie sehr abenteuerlich fühlen, können Sie automatisch die Liste verpflichten filtern, den ersten interaktiven Teils des Fütterungsmaterials unter Umgehung:
EDITOR='sed -i -e "2,$s/pick/squash/"' git rebase -i F
Diese automatisch pick
zu squash
auf allen Linien ändern wird mit dem Start zweite Zeile durch Filtern der Editor-Datei durch sed
anstelle von Ihrem üblichen interaktiven Editor.
Wenn ich ein 'git log' mache, zeigt die Ausgabe die Liste der Commits an, die zusammen gequetscht wurden. Gibt es eine Möglichkeit, dies zu tun, so dass nur die neue Commit-ID mit dem Kommentar "Zusammenführen" angezeigt wird? – Maddy
Ja, benutze 'git commit -m'. Ein leerer 'git commit' verwendet hier den Standard von' merge --squash', der eine verkettete Liste der Verzweigungs-Commits ist. –
RJFalconer
Sehr sauber, auch wahrscheinlich der sicherste Weg, es zu tun, da keine Rebase beteiligt ist. –