git ready

Lerne Git Commit für Commit
von Nick Quaranto, Übersetzung von Nico Gulden

Ignorieren entfernt keine Datei

eingetragen am 06 Mar 2009

Im #git Channel auf Freenode sehe ich häufig verwirrte Anfänger mit der Frage, warum eine Datei nicht aus ihrer Historie verschwindet, wenn sie sie in ihre .gitignore Datei einfügen. Die Antwort darauf ist ziemlich einfach! Wenn Git eine Datei ignoriert, werden nur Änderungen an dieser Datei nicht mehr beobachtet und nichts weiter. Das bedeutet, dass die Historie die Datei beibehalten wird, sofern sich die Datei bereits im Repository befindet.

Wenn du eine Datei aus dem Repository löschen, aber im Arbeitsverzeichnis behalten möchtest, verwende einfach:

git rm --cached <file>

Dieser Befehl behält die Datei aber immer noch in der Historie. Wenn du die Datei tatsächlich aus der History löschen möchtest, hast du zwei Optionen: Deine Repository-Commits neu schreiben oder komplett von vorne beginnen. Beide Optionen sind wirklich Mist und das aus gutem Grund: Git versucht wirklich hart, keine Daten zu verlieren. Wie beim Rebasing zwingt dich Git dazu, über diese Optionen nachzudenken, weil es zerstörerische Operationen sind.

Wenn du tatsächlich eine Datei aus deiner Historie löschen möchtest, ist git filter-branch die Bügelsäge, nach der du suchst. Schau vor der Verwendung des Befehls besser noch in die Manpage, weil er buchstäblich die Commits deine Projekts neu schreibt. Für einige Aktionen ist der Befehl ein großartiges Werkzeug, das eine ganze Reihe Zeugs beherrscht wie beispielsweise vom kompletten Löschen eines Commit eines Autors bis hin zum Umbewegen des Hauptverzeichnisses des Projektes. Der Befehl zum Löschen einer Datei aus allen Revisionen lautet:

git filter-branch --index-filter 'git rm --cached <file>' HEAD

Diese Aktion kann durchaus sehr nützlich sein, wenn du empfindliche oder vertrauliche Informationen ausschwärzen möchtest, die in deinem Repository zu finden sind. Weitere zukünftige Tips werden andere nützliche Dinge von filter-branch behandeln. Wenn du andere nützliche Tips kennst, teile sie uns in den Kommentaren mit oder übermittle einen Tip!