guide

Bereits committete Dateien mit .gitignore ignorieren

So nehmen Sie Dateien, die trotz .gitignore weiter verfolgt werden, mit git rm --cached aus dem Tracking, finden verfolgte Dateien, auf die Ausschlussregeln passen, und gehen vor, wenn Geheimnisse committet wurden.

Das ist die häufigste Frage überhaupt. .gitignore gilt nur für Dateien, die noch nicht verfolgt werden. Eine einmal committete Datei zeigt auch nach dem Hinzufügen einer Regel weiter Änderungen an. Um das Tracking zu beenden, müssen Sie die Datei aus dem Index (dem Staging-Bereich) entfernen.

Eine einzelne Datei oder ein einzelner Ordner

# 1) Regel zur .gitignore hinzufügen (z. B. .env, dist/)
# 2) Nur aus dem Index entfernen — die echten Dateien im Arbeitsordner bleiben
git rm --cached .env
git rm -r --cached dist/
# 3) Committen
git commit -m "Stop tracking .env and dist"

Entscheidend ist --cached. Ohne diese Option löscht git rm auch die Dateien im Arbeitsordner. Für Verzeichnisse ist -r nötig.

Verfolgte Dateien finden, auf die Ausschlussregeln passen

Um nach dem Anwenden einer neuen Vorlage zu sehen, was erfasst wird, verwenden Sie folgenden Befehl.

git ls-files -ci --exclude-standard

-c steht für verfolgte Dateien, -i für nur die, auf die Ausschlussregeln passen, und --exclude-standard bedeutet, .gitignore, .git/info/exclude und die globale Einstellung anzuwenden. Stimmt die Liste, können Sie alle auf einmal aus dem Tracking nehmen.

# bash / zsh
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached --
# PowerShell
git -c core.quotePath=false ls-files -ci --exclude-standard | ForEach-Object { git rm --cached -- "$_" }

Im Tab Tracking aufheben des Generators können Sie diese Befehle passend für Ihre Shell erzeugen.

Alles neu anwenden

Haben Sie die .gitignore stark verändert, ist es gängig, den Index zu leeren und alles erneut hinzuzufügen.

git rm -r --cached .
git add .
git commit -m "Apply .gitignore"

git add . wendet beim erneuten Hinzufügen die Ausschlussregeln an, sodass ignorierte Dateien herausfallen. Prüfen Sie aber vor dem Commit unbedingt die Löschliste mit git status. In Repositorys mit geänderter Zeilenende-Einstellung (core.autocrlf) können viele Dateien als geändert erscheinen.

Auswirkungen auf andere

Wenn Sie einen Commit pushen, der das Tracking aufhebt, wird die betreffende Datei im Arbeitsordner aller, die diesen Commit pullen, gelöscht. Aus Sicht von git wurde die Datei ja aus dem Repository entfernt. Handelt es sich um Dateien, die jeder für sich braucht, etwa .env oder IDE-Einstellungen, sagen Sie vorher Bescheid, damit alle eine Sicherung anlegen.

Wenn Geheimnisse bereits gepusht wurden

Das Aufheben des Trackings wirkt sich nur auf künftige Commits aus. In früheren Commits bleibt die Datei erhalten, und jeder kann sie aus dem Verlauf abrufen. Gehen Sie in dieser Reihenfolge vor.

  1. Widerrufen Sie offengelegte Schlüssel und Passwörter zuerst und stellen Sie neue aus. Das ist das Wichtigste.
  2. Nehmen Sie die Datei aus dem Tracking und tragen Sie sie in die .gitignore ein.
  3. Entfernen Sie die Datei bei Bedarf mit einem Werkzeug wie git filter-repo aus dem Verlauf und führen Sie einen Force-Push durch. Bereits geklonte oder geforkte Kopien lassen sich damit nicht löschen, daher ersetzt dieser Schritt Schritt 1 nicht.

assume-unchanged und skip-worktree sind keine Ausschlussfunktionen

git update-index --assume-unchanged und --skip-worktree blenden Änderungen an verfolgten Dateien vorübergehend aus, die Dateien bleiben aber verfolgt.

Auch die git-Dokumentation rät davon ab, diese Optionen zu nutzen, um Änderungen an verfolgten Dateien zu ignorieren. Für gemeinsam genutzte Konfigurationsdateien ist es sicherer, config.example.json zu committen und die echte config.json zu ignorieren.

Quellen

← ZurückEigene Ausschlussregeln mit .git/info/exclude