git

git

git Commit Historie eines Branches entfernen

Den aktuellen Branch (im Beispiel ‘main’) auf den Stand bringen, der später im root der bereinigten Commit Historie stehen soll.

Als Zwischenschritt wird ein Branch (’temp_branch’) erzeugt. Durch den Parameter --orphan hat dieser keine Commit Historie.

$ git checkout --orphan temp_branch

In diesem Branch alle Dateien Stagen (git add) und den initialen Commit durchführen

$ git commit -m "initial commit"

Damit sind alle Projektdateien im neuen Branch enthalten, haben aber nicht die Commit Historie des anderen Branches.

Der alte Branch kann nun entfernt werden.

$ git branch -D main

Und der aktuelle Branch auf den Namen des alten Branches umbenannt werden.

$ git branch -m main

Bisher wurden die Änderungen nur an dem lokalen Repository vorgenommen und es wurden Referenzen auf die Branches in einer Form geändert, dass andere Clones des Repositories nicht mehr damit zurecht kommen. Dies würde man beim ersten Push auf den Server beobachten, der die Änderungen ablehnt. Durch den zusätzlichen Parameter --force lässt sich trotzdem der geänderte Stand des Repositories pushen, allerdings müssen all diejenigen, die einen Clone des Repositories haben diesen Parameter auch beim nächsten pull angeben um das angepasste Repository zu laden.

$ git push --force origin main

Automatic rebase

Um einen git rebase mehrerer commits ohne manuelle Interaktion durchzuführen kann das Editor Kommando gegen einen sed getauscht werden und damit bis auf den ersten ‘pick’ alle weiteren gegen ein ‘squash’ getauscht werden.

$ GIT_SEQUENCE_EDITOR="sed -i '2,\$s/^pick/squash/'" git rebase -i $REBASE_BASE --autosquash