Um Änderungen an einer Datei zu verwerfen, gehen Sie normalerweise wie folgt vor:
git checkout -- <file>
Was passiert, wenn die Änderung, die ich verwerfen möchte, das Löschen der Datei ist? Die obige Zeile würde einen Fehler ergeben:
error: pathspec '<file>' did not match any file(s) known to git.
Welcher Befehl stellt diese einzelne Datei wieder her, ohne andere Änderungen rückgängig zu machen?
Bonuspunkt: Was ist auch, wenn die Änderung, die ich verwerfen möchte, das Hinzufügen einer Datei ist? Ich würde gerne wissen, wie ich diese Veränderung auch aufheben kann.
git
git-checkout
Lurscher
quelle
quelle
Antworten:
Angenommen Sie wollen die Auswirkungen rückgängig zu machen
git rm <file>
oderrm <file>
gefolgt vongit add -A
oder etwas ähnliches:Zum Rückgängigmachen reicht
git add <file>
die erste Zeile oben aus, vorausgesetzt, Sie haben noch keine Festschreibung vorgenommen.quelle
--
ist der Schlüssel.git reset <file>
funktioniert nicht, was mich hierher gebracht hat.end-of-options-marker
nur im Fall der gelöschten Datei erforderlich?git reset HEAD <file>
, was gleichwertig ist),git reset
behandelt jedoch das erste Argument zuvorend-of-options-marker
als Referenznamen und nicht als Dateinamen. Könnte es etwas flexibler geschrieben werden? Wahrscheinlich. Warum war es nicht? Wahrscheinlich wissen nur die Entwickler sicher.git reset filename
funktioniert gut für nicht gelöschte Dateien.git reset <file>
und erklärengit reset -- <file>
. Es fällt mir schwer, auf Google eine Antwort darauf zu finden.Beide Fragen werden in beantwortet
git status
.Um das Hinzufügen einer neuen Datei zu beenden, verwenden Sie
git rm --cached filename.ext
Um das Löschen einer Datei aufzuheben, verwenden Sie
git reset HEAD filename.ext
Auf der anderen Seite werden
git checkout --
niemals nicht inszenierte Änderungen verworfen.quelle
git status
zitiert zu sehen ; zeigt Benutzern jetzt und beim nächsten Mal eine Möglichkeit zur Selbsthilfe und für den Fall, dass Informationen in zukünftigen Git-Versionen hinzugefügt oder aktualisiert werden.git reset
. Nach dem sehengit reset
Sie "Geändert, aber nicht aktualisiert", was anscheinend "Änderungen nicht inszeniert" in der Muttersprache der Git-Autoren bedeutet. Noch wichtiger ist, dass das ganze Dogma über "Git-Status sagt dir alles, was du weißt" eine Lüge ist. (Manager, die sagen, dass sie die Zeit der Leute verschwenden und entlassen werden sollten.)Die Antworten auf Ihre beiden Fragen hängen zusammen. Ich werde mit dem zweiten beginnen:
Sobald Sie eine Datei bereitgestellt haben (häufig mit
git add
, obwohl einige andere Befehle die Änderungen implizit ebenfalls bereitstellengit rm
), können Sie diese Änderung mit zurücksetzengit reset -- <file>
.In Ihrem Fall müssen Sie
git rm
die Datei entfernt haben. Dies entspricht dem einfachen Entfernenrm
und dem anschließenden Staging dieser Änderung. Wenn Sie es zuerst mit der Bühne entfernen, könnengit reset -- <file>
Sie es mit wiederherstellengit checkout -- <file>
.quelle
Wenn es bereitgestellt und festgeschrieben wurde, wird die Datei durch Folgendes zurückgesetzt:
Dies funktioniert für eine Löschung, die mehrere Commits zuvor durchgeführt hat.
quelle
git revert COMMIT_HASH
Ab Git v2.23 haben Sie eine andere Option:
git restore --staged -- <file>
quelle