Nach dem letzten Festschreiben habe ich eine Reihe von Dateien in meiner Arbeitskopie geändert, aber ich möchte die Änderungen an einer dieser Dateien rückgängig machen, da beim Zurücksetzen auf den gleichen Status wie beim letzten Festschreiben.
Ich möchte jedoch nur die Änderungen an der Arbeitskopie nur dieser einen Datei rückgängig machen, sonst nichts.
Wie mache ich das?
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
für 2 Commits aus dem letzten oderHEAD^^^
für 3 Commits zurück tun . Sie können auchHEAD~2
oder verwendenHEAD~3
, was bequemer wird, wenn Sie mehr Commits zurückgeben möchten, währendHEAD^2
dies "das zweite übergeordnete Element dieses Commits" bedeutet. Aufgrund von Merge-Commits kann ein Commit mehr als ein vorheriges Commit haben. MitHEAD^
einer Nummer wird also ausgewählt, welches dieser Eltern verwendet wird, während mitHEAD~
einer Nummer immer das erste übergeordnete Commit ausgewählt wird, aber diese Anzahl von Commits zurück. Siehegit help rev-parse
für weitere Details.Benutz einfach
Dadurch wird der Dateiname durch die neueste Version aus dem aktuellen Zweig ersetzt.
WARNUNG: Ihre Änderungen werden verworfen - es wird keine Sicherung gespeichert.
quelle
git checkout x
und x zufällig sowohl ein Zweigname als auch ein Dateiname ist, bin ich mir nicht sicher, wie das Standardverhalten lautet, aber ich denke, Git geht davon aus, dass Sie zu Zweig x wechseln möchten. Wenn Sie verwenden--
, sagen Sie, dass das Folgende Dateinamen sind.--
sie zu entfernen . Obwohl immer noch korrekt, wie @hasen betont, kann es bei Unklarheiten zwischen Dateinamen und Zweignamen zu sehr unerwünschtem Verhalten kommen!--
, schön und einfach. Wenn Sie Zweige mit Dateinamen benennen, muss irgendwo schlecht gedacht werden ...Ich habe dies heute verwendet, weil mir klar wurde, dass mein Favicon vor einigen Commits überschrieben wurde, als ich auf Drupal 6.10 hochgestuft habe, also musste ich es zurückbekommen. Folgendes habe ich getan:
quelle
git log --oneline <filename>
gibt Ihnen ein kompakteres Protokoll und enthält nur Änderungen an der spezifischen Dateigit reflog <filename>
Wenn Ihre Datei bereits bereitgestellt ist (passiert, wenn Sie nach dem Bearbeiten der Datei ein Git hinzufügen usw.), um Ihre Änderungen aufzuheben.
Verwenden
Dann
Wenn nicht bereits inszeniert, verwenden Sie einfach
quelle
Wenn Sie nur die Änderungen des vorherigen Commits an dieser einen Datei rückgängig machen möchten, können Sie Folgendes versuchen:
Dadurch wird die Datei wie vor dem letzten Festschreiben ausgecheckt. Wenn Sie noch ein paar Commits zurückgeben möchten, verwenden Sie die
branchname~n
Notation.quelle
branchname^
Ich habe durch Git Bash fertig:
(use "git checkout -- <file>..." to discard changes in working directory)
quelle
Ich bin immer verwirrt, daher hier ein Erinnerungstestfall. Nehmen wir an, wir müssen dieses
bash
Skript testengit
:An diesem Punkt wird die Änderung im Cache nicht inszeniert, so
git status
ist:Wenn wir dies tun
git checkout
, ist das Ergebnis:Wenn wir es stattdessen tun
git reset
, ist das Ergebnis:In diesem Fall
git reset
macht es also keinen Unterschied, ob die Änderungen nicht bereitgestellt werden , währendgit checkout
die Änderungen überschrieben werden.Nehmen wir nun an, dass die letzte Änderung gegenüber dem obigen Skript inszeniert / zwischengespeichert ist, das heißt, wir haben sie auch
git add b.txt
am Ende vorgenommen.In diesem Fall ist
git status
an dieser Stelle:Wenn wir dies tun
git checkout
, ist das Ergebnis:Wenn wir es stattdessen tun
git reset
, ist das Ergebnis:In diesem Fall werden also, wenn die Änderungen
git reset
bereitgestellt werden, schrittweise Änderungen in nicht bereitgestellte Änderungen umgewandelt, währendgit checkout
die Änderungen vollständig überschrieben werden.quelle
Diese Antwort bezieht sich auf Befehle, die zum Rückgängigmachen lokaler Änderungen erforderlich sind, die sich in mehreren spezifischen Dateien in demselben oder mehreren Ordnern (oder Verzeichnissen) befinden. Diese Antwort befasst sich speziell mit Fragen, bei denen ein Benutzer mehr als eine Datei hat, der Benutzer jedoch nicht alle lokalen Änderungen rückgängig machen möchte:
Für mehrere Dateien im selben Ordner:
Das Sternchen oben führt den Trick aus, alle Dateien an diesem Speicherort unter name1 / name2 rückgängig zu machen.
Hinweis: name1, name2, nameA, subFolder - Alle diese Beispielordnernamen geben den Ordner oder das Paket an, in dem sich die betreffenden Dateien möglicherweise befinden.
quelle
Ich stelle meine Dateien mit der SHA-ID wieder her
git checkout <sha hash id> <file name>
quelle
Für mich hat nur dieser funktioniert
quelle
Wenn Sie Ihr Commit noch nicht gepusht oder anderweitig geteilt haben:
quelle
Wenn es bereits festgeschrieben ist, können Sie die Änderung für die Datei zurücksetzen und erneut festschreiben und dann das neue Festschreiben mit dem letzten Festschreiben quetschen.
quelle
Ich weiß nicht warum, aber wenn ich versuche, meinen Code einzugeben, wird er als Bild angezeigt.
quelle