Datei aus dem letzten Commit entfernen, Inhalt aber behalten

Mit git restore und git commit --amend eine versehentlich mitcommitete Datei wieder herauslösen

Man committet und merkt danach, dass eine Datei im Commit gelandet ist, die dort nichts zu suchen hat. Die Änderung selbst will man aber behalten.

How To

Die Datei aus dem Commit-Inhalt lösen, ihren aktuellen Inhalt aber behalten:

1
2
git restore --source=HEAD~1 --staged myFile.php
git commit --amend --no-edit

git restore --source=HEAD~1 --staged setzt die Datei im Index auf den Stand vor dem Commit zurück. Das Arbeitsverzeichnis bleibt dabei unangetastet. Der Inhalt der Datei geht also nicht verloren. Das anschließende git commit --amend --no-edit schreibt den Commit ohne die Datei neu, die Commit-Message bleibt unverändert.

Ergebnis

Der bisherige Commit wird durch einen neuen Commit ohne die README ersetzt. Die Datei taucht danach wieder als unstaged Änderung in git status auf.

Wichtig: --amend erzeugt einen neuen Commit-Hash. Wenn der alte Commit bereits gepusht wurde, braucht es einen Force-Push.

Verifikation

1
2
git show --stat HEAD
git status -s

git show --stat HEAD zeigt, welche Dateien tatsächlich im Commit stecken — die entfernte Datei darf hier nicht mehr auftauchen. git status -s zeigt sie dagegen wieder als Änderung im Arbeitsverzeichnis.

Erstellt mit Hugo
Theme Stack gestaltet von Jimmy