Squash schreibt direkt an Feature ohne Rebase oder Merge
Lesezeit: 3 Minuten
Ich habe ein wenig darüber gelesen --squashing-Commits, aber sie scheinen alle mit einem Hand in Hand zu gehen --rebase.
Ich habe einen Feature-Zweig mit einer Reihe von Commits wie diesem:
(Feature) A --> B --> C --> D --> E --> F --> G
/
(Master) M1 --> M2 --> M3
Angenommen, ich möchte wieder mit dem zusammenführen Master Branch, aber ich möchte zuerst die Commits für mein Feature bereinigen.
Ist es möglich, zu:
Wählen Sie Commit B, E und F und quetschen Sie sie zu einem Commit zusammen?
ODER
Kann ich nur die Commits quetschen, die der Reihe nach kommen, also quetschen: (A, B und C) oder quetschen (D, E und F) usw.?
In jedem Fall kann ich einen Squash direkt auf meinem Feature ausführen, OHNE sofort a zu initialisieren Merge oder Rebase damit?
Wenn ja, wie kann ich das mit Git machen?
Im Arbeitsablauf meines Teams fusionieren wir oft mitten in einer Reihe von Commits mit dem Upstream, und das Rebasing könnte hässlich werden. Ich habe das als hilfreich empfunden, um alle Commits, die vor dem Master liegen, in einem zusammenzufassen:
Bevor Sie den obigen Merge-Master in Ihren Feature-Branch ausführen
– Steffi
4. Mai 2021 um 12:10 Uhr
Ja und nein.
Ja, Sie können es vermeiden, das übergeordnete Element von Commit ‘A’ zu ändern, aber ich glaube, Sie können es nicht vermeiden git rebase. Sie können eine interaktive Rebase auf demselben Stamm durchführen:
git rebase -i M2 Feature
Dann kannst du machen was du willst und am Ende verzweigen Feature wird immer noch von Commit M2 beginnen.
Dafür bin ich hergekommen. Eine Möglichkeit, nur bestimmte Commits innerhalb des Feature-Zweigs zu quetschen, ohne den Master einzubeziehen. Vielen Dank!
– Justin Eyster
24. Juni 2020 um 16:48 Uhr
avivamg
Lösung: Es ist möglich, mehrere Commits ohne Rebasing zu einem einzigen zusammenzufassen. Die beste Option besteht darin, einen neuen temporären Zweig vom Master zu erstellen, dann den unordentlichen Zweig, der in nur einem einzigen Commit gequetscht wurde, in den temporären Zweig einzufügen, dann einen Zeiger darauf in Ihrem Arbeitszweig zu erstellen und danach den temporären zu löschen.
(Feature) A --> B --> C --> D --> E --> F --> G
/
(Master) M1 --> M2 --> M3
Nach:
AG -->
/
(Master) M1 --> M2 --> M3
Dies funktioniert, wenn die Commits lokal sind und noch nicht gepusht wurden:
git reset --soft HEAD~x
git commit -m "whatever"
Wobei x die Anzahl der Commits ist, die Sie quetschen möchten
Ich bin mir nicht sicher, wie das funktionieren würde, wenn sich die Commits, die Sie quetschen möchten, auch auf der Fernbedienung befinden – wenn dies der Fall wäre, müssten Sie Folgendes tun:
git push -f
nachdem Sie die obigen Befehle ausgeführt haben. Die üblichen Warnungen vor git push -f apply – wenn Push erzwungen werden muss, stellen Sie sicher, dass Sie zuerst Plausibilitätsprüfungen mit git log durchführen!
11274300cookie-checkSquash schreibt direkt an Feature ohne Rebase oder Mergeyes