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:

# Commit any working changes on branch "mybranchname", then...
git checkout master
git checkout -b mybranchname_temp
git merge --squash mybranchname
git commit -am "Message describing all squashed commits"
git branch -m mybranchname mybranchname_unsquashed
git branch -m mybranchname

# Optional cleanup:
git branch -D mybranchname_unsquashed

# If squashing already-pushed commits...
git push -f

  • Vielleicht solltest du das zitieren gist.github.com/n00neimp0rtant/9515611

    – benutzerfreundlich

    11. März 2020 um 4:36 Uhr

  • 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

Benutzer-Avatar
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.

Angenommen:

  • master ist Ihr Hauptzweig,
  • feature ist Ihr chaotisch arbeitender Zweig
  • temp ist Ihre vorübergehende Filiale

Wie es geht?

git checkout -b <temp> <master>
git merge --squash <feature>
git commit -m "your single message"
git checkout <feature>
git reset --hard <temp>
git push -f
git branch -D <temp>

Vor:

(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!

1127430cookie-checkSquash schreibt direkt an Feature ohne Rebase oder Merge

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy