Daten aus der Git-Historie entfernen
Wie man die Commit-Historie bearbeitet ohne alles kaputt zu machen (hoffentlich)
git rebase
Das Versionierungstool git ist in vielen Situationen nützlich. Das liegt unter anderem daran, dass jeder noch so unwichtige Zwischenstand eines Projekts als commit
in der git-Historie festgehalten wird und dort jederzeit mithilfe des Commands git checkout
abgerufen werden kann. Lästig wird dies jedoch, wenn sich Dateien oder einzelne Zeilen in das Projekt eingeschlichen haben, die nachträglich und restlos entfernt werden sollen. Zum Beispiel, wenn ein Projekt veröffentlicht werden soll, und in einigen Commits Daten enthalten sind, die nicht für die Öffentlichkeit bestimmt sind. Dann reicht es natürlich nicht, diese im HEAD
des aktuellen Branches zu löschen und die Änderung zu commiten, da die unliebsamen Daten in allen vorherigen Commits noch vorhanden sind, die nach ihrem Hinzufügen erstellt wurden.
In solchen Fällen muss die commit-Historie manipuliert werden. Dies ist ohne weiteres möglich, aber bietet auch die Möglichkeit, das Projekt nachhaltig kaputt zu machen.
git rebase -i <hash>~1
Startet den Rebase.<hash>
sei durch den Hash des Commits zu ersetzen, in dem das Problem entstanden ist, in welchem also zum Beispiel die vertraulichen Daten hinzugefügt wurden. Das ~1
verweist auf den Commit vor dem genannten.
edit
statt pick
edit
statt pick
eingetragen werden, damit im folgenden die Änderungen dieses Commits angepasst werden können.git add .
git commit --amend
comitted werden.git rebase --continue
setzt den Rebase fort, zum Beispiel bis zum nächsten Commit, bei dem edit
gewählt wurde. Alle Konflikte, die durch die getätigte Änderung entstehen, können nun wie andere Merge-Konflikte auch gelöst und mithilfe von Schritt 3, 4 und 5 übernommen werden. Tritt an irgendeiner Stelle ein Problem auf, kann der gesamte Rebase stattdessen mit git rebase --abort
abgebrochen werden.Noch Fragen?