Veit Schiele Communications

Veit Schiele Communications
StartseiteDienstleistungenTechnische DokumentationGitGit: Entfernen von Commits, Dateien und Historie

Git: Entfernen von Commits, Dateien und Historie

Manchmal ist es erforderlich, die git-Historie zu ändern, z.B. wenn versehentlich sensible Daten in das Repository gelangt sind.
erstellt von Veit Schielezuletzt verändert: 16.07.2017 16:17 © Veit Schiele 2011–2017

Löschen des letzten Commit

$ git reset HEAD^ --hard
$ git push origin -f

Löschen anderer Commits

Angenommen der SHA-Wert des zu entfernenden Commits sei d82199e, dann ist der einfachste Weg ein interaktiver rebase auf die Mutter des betreffenden Commit:

$ git rebase -i d82199e origin

Dies öffnet einen Editor und zeigt Ihnen eine Liste aller Commits nach dem zu entfernenden Commit:

pick d82199e Updated readme
pick 410266e Changed import for the INameChooser interface
…

Wenn Sie nun eine Zeile entfernen, so wird dieser Commit nach dem Speichern und Schließen des Editors gelöscht. Anschließend kann das entfernte Repository aktualisiert werden mit:

$ git push origin HEAD:master -f

Ändern einer Commit-Message

Dies lässt sich ebenfalls einfach mit rebase realisieren wobei Sie in Ihrem Editor nicht die Zeile löschen sondern in der Zeile pick durch r (reword) ersetzen.

Entfernen einer Datei aus der Historie

Eine Datei kann vollständig aus git history pro Branch entfernt werden mit:

$ git filter-branch -f --force --index-filter 'git rm -rf --cached --ignore-unmatch path/somefile' --prune-empty --tag-name-filter cat -- --all
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now
$ git gc --aggressive --prune=now
$ git push origin <branch> --force

Entfernen einer Zeichenkette aus der Historie

Soll nur eine Zeichenkette aus der Historie entfernt werden, so geht dies mit:

$ git filter-branch --force --tree-filter "[ -f <path>/<file> ] && sed -i 's/<secret password>//g' <path>/<file> || /bin/true" -- --all
…

Note

Bei Mac OS X muss /usr/bin/true statt des /bin/true bei Linux verwendet werden.

Zum Weiterlesen