633 Stimmen

Eine gelöschte Datei in Git wiederherstellen

Um Änderungen an einer Datei zu verwerfen, gehen Sie normalerweise wie folgt vor:

git checkout -- <file>

Was ist, wenn die Änderung, die ich verwerfen möchte, das Löschen der Datei zur Folge hat? Die obige Zeile würde einen Fehler auslösen:

error: pathspec '<file>' did not match any file(s) known to git.

Mit welchem Befehl lässt sich diese einzelne Datei wiederherstellen, ohne andere Änderungen rückgängig zu machen?

Bonuspunkt: Was ist, wenn die Änderung, die ich verwerfen möchte, Hinzufügen von eine Datei? Ich würde gerne wissen, wie man diese Änderung auch wieder rückgängig machen kann.

987voto

twalberg Punkte 56757

Angenommen, Sie wollen die Auswirkungen der folgenden Maßnahmen rückgängig machen git rm <file> o rm <file> gefolgt von git add -A oder etwas Ähnliches:

# this restores the file status in the index
git reset -- <file>
# then check out a copy from the index
git checkout -- <file>

Rückgängig machen git add <file> reicht die erste Zeile oben aus, vorausgesetzt, Sie haben noch nicht zugesagt.

69voto

seppo0010 Punkte 14176

Beide Fragen werden beantwortet in git status .

Um das Hinzufügen einer neuen Datei rückgängig zu machen, verwenden Sie git rm --cached filename.ext

# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test

Um das Löschen einer Datei rückgängig zu machen, verwenden Sie git reset HEAD filename.ext

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    test

Auf der anderen Seite, git checkout -- niemals unstage, sondern verwirft nur nicht-staged Änderungen.

15voto

michaeldever Punkte 400

Wenn die Datei bereits bereitgestellt und übertragen wurde, wird sie mit dem folgenden Befehl zurückgesetzt:

git reset COMMIT_HASH file_path
git checkout COMMIT_HASH file_path
git add file_path

Dies funktioniert auch bei einer Löschung, die mehrere Commits zuvor stattgefunden hat.

12voto

Ben Jackson Punkte 84305

Die Antworten auf Ihre beiden Fragen sind miteinander verbunden. Ich werde mit der zweiten beginnen:

Sobald Sie eine Datei bereitgestellt haben (oft mit git add obwohl einige andere Befehle implizit auch die Änderungen durchführen, wie git rm ) können Sie diese Änderung mit git reset -- <file> .

In Ihrem Fall müssen Sie Folgendes verwendet haben git rm um die Datei zu entfernen, was dem einfachen Entfernen mit rm und dann diese Änderung in Szene zu setzen. Wenn Sie die Änderung zunächst mit git reset -- <file> können Sie es dann wiederherstellen mit git checkout -- <file> .

10voto

Kreempuff Punkte 575

Ab dem git v2.23 haben Sie eine weitere Möglichkeit:

git restore --staged -- <file>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X