Ich kann da draußen ein paar Antworten finden, die meinen Wünschen nahe kommen, aber ich fürchte, ich bin nicht wirklich erfahren genug mit Git, um genau zu verstehen, wie ich das erreichen kann, was ich will.
Bei einem lokalen Zweig mit den Commits ABCDEFGHIJ möchte ich einige der Commits zusammenquetschen, sodass ich am Ende beispielsweise das Äquivalent von A-BCD-E-FGH-IJ habe.
Ist das möglich? Die Absicht besteht darin, dies nach der Umbasierung mit einem lokalen Zweig zu tun, aber bevor er wieder in den Master-Zweig zusammengeführt wird, um eine prägnantere und informativere Historie zu erstellen.
Sie können dies mit tun rebase
. Angenommen, die Commits A–J befinden sich in einem lokalen Zweig branchname
darauf gebaut master
dann kannst du das machen:
git checkout branchname
git rebase -i master
Ihnen wird ein interaktives Fenster wie dieses angezeigt:
pick A Commit message A
pick B Commit message B
pick C Commit message C
pick D Commit message D
pick E Commit message E
...
Interaktive Rebase bietet Anweisungen für Ihr Szenario, daher sollten Sie “Pick” für C und D (und dasselbe für G, H und J) in “Squash” ändern:
pick A Commit message A
pick B Commit message B
squash C Commit message C
squash D Commit message D
pick E Commit message E
Dadurch werden B, C und D zu einem einzigen Commit zusammengefasst, sodass Sie die Commit-Nachricht ändern können.
Wenn Sie gerne die Commit-Nachricht von B verwenden, können Sie “fixup” anstelle von “squash” verwenden und werden nicht aufgefordert, die Commit-Nachricht zu aktualisieren.
Das interaktive Fenster ist sehr leistungsfähig, und Sie können Commits so oft neu anordnen, wie Sie möchten, oder einfach die Zeile löschen (oder das Präfix in „drop“ ändern) und dieses Commit wird entfernt. Wenn E beispielsweise einen Tippfehler behebt, den Sie in A gemacht haben, können Sie Folgendes tun:
pick A Commit message A
fixup E Commit message E
pick B Commit message B
pick C Commit message C
pick D Commit message D
Wenn Sie Commits jedoch neu anordnen, laufen Sie Gefahr, Konflikte auf dem Weg lösen zu müssen. Sie können immer verwenden git rebase --abort
um in Ihren ursprünglichen Zustand zurückzukehren.
git log --oneline
git checkout your-branch
git rebase -i HEAD~3
Schreiben Sie Ihre Kommentare, dann :wq(schreiben und beenden) und drücken Sie die Eingabetaste.
git log --oneline

Mögliches Duplikat von Git-Squash-Commits mitten in einem Branch
– Winkler
18. Oktober 2018 um 10:59 Uhr