Artikelformat

Git: Alle commits eines Branch „squashen“

Wenn man mit Git und vielen Branches arbeitet, dann möchte man nach dem Merge in den Haupt-Branch noch eine gewisse Übersicht behalten. Dies kann man beispielsweise mit folgenden kleinen Skript bzw Vorgehen.

Das Problem tritt vor allem dann auf, wenn man während der Commits gelegentlich den Haupt-Branch in den eigenen Branch merged. Dadurch wird ein abschließendes Rebase ziemlich kompliziert und es treten oftmals viele Konflikte auf. Da man diese nicht alle lösen will kann man einfach alle Commits in einem Branch squashen.

Tip: Der bessere Weg ist natürlich erst gar nicht den Hauptzweig in den Branch zu ziehen und stattdessen ein interaktives Rebase zu machen.

Wenn das Kind aber nun im Brunnen liegt, sollte man schauen, es möglichst schnell und pragmatisch da wieder raus zu bekommen.

Zuerst sollte man sich den letzten commit des aktuellen Branches merken. An die Information kommt man hiermit:

git log -n 1

Nun setzt man den Branch lokal zurück und merged den oben gemerkten Commit mit der Squash-Option:

git reset --hard origin/dev
git merge --squash <sha1>

Jetzt ist man schon fast fertig, muss nur noch alles commiten und pushen:

git commit -m "mein squashed commit"
git push --force origin/dev // main branch

Achtung: Das „push –force“ sorgt dafür, dass die Historie umgeschrieben wird. D.h. wenn man mit mehr als einer Person an einem Branch arbeitet, kann es zu Problemen kommen, da bei dem Kollegen die alte Historie noch vorhanden ist.

Der Kollege kann mit einem kurzen Zurücksetzen des Branches hier Abhilfe schaffen, wenn nicht bereits Commits lokal vorhanden sind:

git reset --hard origin/branch

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.