Frage Entfernen Sie Dateien von Git commit


Ich benutze Git und ich habe einige Dateien mit verwendet

git commit -a

Später stellte ich fest, dass versehentlich eine Datei zum Commit hinzugefügt wurde.

Wie kann ich eine Datei vom letzten Commit entfernen?


1091
2017-09-18 16:59


Ursprung


Antworten:


Ich denke, andere Antworten hier sind falsch, weil es darum geht, die versehentlich festgeschriebenen Dateien vom vorherigen Commit zurück in den Staging-Bereich zu verschieben, ohne die Änderungen zu annullieren. Dies kann wie Paritosh Singh vorgeschlagen werden:

git reset --soft HEAD^ 

oder

git reset --soft HEAD~1

Setzen Sie dann die unerwünschten Dateien zurück, um sie aus dem Commit herauszulassen:

git reset HEAD path/to/unwanted_file

Jetzt erneut Commit, Sie können sogar die gleiche Commit-Nachricht erneut verwenden:

git commit -c ORIG_HEAD  

2096
2018-03-10 10:56



BEACHTUNG! Wenn Sie nur eine Datei von Ihrem vorherigen Commit entfernen möchten und Halte es auf der Festplatte, lesen Jazzlins Antwort gleich darüber.

Wenn das deine letzte Verpflichtung ist und du willst Löschen Sie die Datei vollständig aus Ihrem lokalen und dem Remote-Repository, Sie können:

  1. Entferne die Datei git rm <file>
  2. begehen mit änderungsflagge: git commit --amend

Das Änderungs-Flag weist git an, erneut zu committen, aber "merge" (nicht in dem Sinne, dass zwei Zweige zusammengeführt werden) dieses Commit mit dem letzten Commit.

Wie in den Kommentaren erwähnt, mit git rm Hier ist wie mit dem rm befehle selbst!


217
2017-09-18 17:22



Bestehende Antworten sprechen alle über das Entfernen der unerwünschten Dateien von der letzte verpflichten.

Wenn Sie unerwünschte Dateien von einem entfernen möchten alt commit (auch gepushed) und will kein neues Commit erzeugen, was wegen der Aktion unnötig ist:

1.

Suchen Sie das Commit, dem die Datei entsprechen soll.

git checkout <commit_id> <path_to_file>

Sie können dies mehrmals tun, wenn Sie viele Dateien entfernen möchten.

2.

git commit -am "remove unwanted files"

3.

Suchen Sie die commit_id des Commits auf dem die Dateien versehentlich hinzugefügt wurdensagen wir "35c23c2" hier

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

Dieser Befehl öffnet den Editor entsprechend Ihrer Einstellungen. Der Standardwert ist vim.

Verschieben Sie den letzten Commit, der "unerwünschte Dateien entfernen" sollte, in die nächste Zeile des inkorrekten Commits (in unserem Fall "35c23c2") und setzen Sie den Befehl als fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

Sie sollten nach dem Speichern der Datei gut sein.

Beenden :

git push -f

Wenn Sie Konflikte bekommen, müssen Sie diese manuell lösen.


106
2018-01-27 15:24



Wie die akzeptierte Antwort anzeigt, können Sie dies tun, indem Sie das gesamte Commit zurücksetzen. Aber das ist ein ziemlich harter Ansatz.
Eine sauberere Möglichkeit wäre, das Commit beizubehalten und die geänderten Dateien einfach zu entfernen.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

Das git reset nimmt die Datei wie im vorherigen Commit und stuft sie im Index ein. Die Datei im Arbeitsverzeichnis ist unberührt.
Das git commit Dann commit und quetsche den Index in das aktuelle Commit.

Dies übernimmt im Wesentlichen die Version der Datei, die im vorherigen Commit enthalten war, und fügt sie dem aktuellen Commit hinzu. Dies führt zu keiner Nettoänderung und daher wird die Datei effektiv aus dem Festschreiben entfernt.


60
2018-02-25 00:06



Wenn Sie die Änderungen nicht auf den Server übertragen haben, können Sie sie verwenden

git reset --soft HEAD~1

Es wird alle Änderungen zurücksetzen und zu einem Commit zurückgehen

Wenn Sie Ihre Änderungen übernommen haben, folgen Sie den Schritten, die von @CharlesB beantwortet wurden


35
2017-09-18 18:28



Entfernen der Datei mit rm wird es löschen!

Sie fügen immer einen Commit in git hinzu, anstatt ihn zu entfernen, also geben Sie in diesem Fall die Datei in den Zustand zurück, in dem sie sich vor dem ersten Commit befand (dies kann eine 'rm' Aktion sein, wenn die Datei neu ist) und dann re-commit und die Datei wird gehen.

So geben Sie die Datei in einem früheren Status zurück:

    git checkout <commit_id> <path_to_file>

oder um es in den Zustand am entfernten HEAD zurückzugeben:

    git checkout origin/master <path_to_file>

dann ändern Sie das Commit und Sie sollten feststellen, dass die Datei aus der Liste verschwunden ist (und nicht von Ihrer Festplatte gelöscht wurde!)


34
2018-01-28 14:00



git checkout HEAD~ path/to/file
git commit --amend

32
2017-08-23 19:01