Wie kann ich eine Datei auf eine bestimmte Revision zurücksetzen oder wiederherstellen?
Lesezeit: 5 Minuten
Hasst_
Ich habe einige Änderungen an einer Datei vorgenommen, die einige Male als Teil einer Gruppe von Dateien festgeschrieben wurde, aber jetzt möchte ich die Änderungen auf eine frühere Version zurücksetzen/zurücksetzen.
Ich habe eine gemacht git log zusammen mit A git diff um die Revision zu finden, die ich brauche, aber ich habe einfach keine Ahnung, wie ich die Datei in ihren früheren Zustand zurückversetzen kann.
Nach dem Zurücksetzen nicht vergessen --cached beim prüfen git diff. Verknüpfung
– Geoffrey Hale
2. Dezember 2015 um 19:20 Uhr
Ich habe deine Frage gefunden, als ich meine gegoogelt habe. Aber nachdem ich die Lösung gelesen hatte, überprüfte ich mein Protokoll und fand heraus, dass ich die Änderungen als eigenständiges Commit vorgenommen hatte, also machte ich git revert für dieses Commit, und alles andere blieb so, wie ich es wollte. Keine Lösung, nur eine andere Möglichkeit, es manchmal zu tun.
– sudo97
8. August 2017 um 14:08 Uhr
Ich verwende diese manuelle Lösung: $ git revert , entstash dann die gewünschten Änderungen und lade dann diese gewünschten Änderungen in einen neuen Commit hoch.
– Absicht
14. Juli 2021 um 18:19 Uhr
Sie können die an einer Datei vorgenommenen Änderungen mit dem Befehl diff schnell überprüfen:
git diff <commit hash> <filename>
Um dann eine bestimmte Datei auf diesen Commit zurückzusetzen, verwenden Sie den Reset-Befehl:
git reset <commit hash> <filename>
Möglicherweise müssen Sie die verwenden --hard Option, wenn Sie lokale Änderungen haben.
Ein guter Arbeitsablauf zum Verwalten von Wegpunkten besteht darin, Tags zu verwenden, um Punkte in Ihrer Zeitachse sauber zu markieren. Ich kann Ihren letzten Satz nicht ganz verstehen, aber was Sie vielleicht wollen, ist, einen Zweig von einem früheren Zeitpunkt abzuzweigen. Verwenden Sie dazu den praktischen Checkout-Befehl:
Der Befehl ‘git checkout ‘ hat mir meine ältere Version des Projekts zurückgegeben, genau das, wonach ich gesucht habe. Danke, Chris.
– vidur punj
27. Januar 2013 um 9:26 Uhr
Um die Datei zurückzusetzen git checkout <commit hash> <filename> funktionierte besser für mich als git reset
– Motti Strom
7. März 2013 um 16:53 Uhr
Ich wollte eine frühe Version einer einzelnen Datei, weil ich 150 Zeilen mit einem schlecht gewählten Copy/Paste überschrieben hatte. git checkout <commit hash> <filename> hat bei mir funktioniert. Dies sollte meiner Meinung nach nicht die akzeptierte Antwort sein. git reset nicht.
– Harperville
27. Februar 2014 um 20:58 Uhr
Kann ich nicht benutzen git reset Um eine einzelne Datei zurückzusetzen, erhalten Sie eine Fehlermeldung fatal: Cannot do hard reset with paths
– schleichender
23. Dezember 2014 um 17:11 Uhr
Was Slier sagte: Sie können nicht git reset --hard <commit hash> <filename>. Dies wird Fehler mit fatal: Cannot do hard reset with paths. Was Motti Strom sagte: verwenden git checkout <commit hash> <filename>
– Hawkeye Parker
6. Februar 2015 um 5:36 Uhr
Greg Hewgill
git checkout -- foo
Das wird zurückgesetzt foo zu KOPF. Du kannst auch:
git checkout HEAD^ foo
für eine Überarbeitung zurück usw.
Was ist der Unterschied zwischen dieser Antwort, die hat --und die akzeptierte, die nicht?
– 2rs2ts
9. Oktober 2014 um 0:20 Uhr
In Git teilt ein ‘ — ‘ vor der Dateiliste Git mit, dass alle nächsten Argumente als Dateinamen interpretiert werden sollen, nicht als Zweignamen oder irgendetwas anderes. Es ist manchmal ein hilfreicher Disambiguator.
– Foxxtrott
9. Oktober 2014 um 14:32 Uhr
Das ‘–‘ ist nicht nur eine Git-Konvention, sondern etwas, das Sie an verschiedenen Stellen in der *nix-Befehlszeile finden. rm -- -f (Entfernen Sie eine Datei namens -f) scheint das kanonische Beispiel zu sein. Mehr Details hier
– Hawkeye Parker
6. Februar 2015 um 5:49 Uhr
Fügen Sie einfach hinzu, was @HawkeyeParker gesagt hat: rm Der Befehl verwendet getopt(3), um seine Argumente zu parsen. getopt ist der Befehl zum Analysieren von Befehlsargumenten. gnu.org/software/libc/manual/html_node/Getopt.html
– Devy
14. Juli 2015 um 18:11 Uhr
@Honey Ja, das meine ich, und ja, wahrscheinlich überhaupt nicht üblich. Ich habe dieses Beispiel an verschiedenen Stellen gesehen, vielleicht nur, um es einprägsam zu machen: rm -f ist bekannt dafür, beängstigend/gefährlich zu sein. Aber, der Punkt ist, in *nix ein Dateiname kann Beginnen Sie mit einem ‘-‘, und dies wird verschiedene Befehlszeileninterpreter verwirren, die, wenn sie ein ‘-‘ sehen, erwarten, dass eine Befehlsoption folgt. Es kann jede Datei sein, die mit ‘-‘ beginnt; zB “-mySpecialFile”.
– Hawkeye Parker
5. April 2017 um 20:35 Uhr
Und um zur letzten festgeschriebenen Version zurückzukehren, was am häufigsten benötigt wird, können Sie diesen einfacheren Befehl verwenden.
git checkout HEAD file/to/restore
Was ist der Unterschied zwischen diesem (git checkout HEAD file/to/restore) und git reset –hard file/to/restore ???
– Motti Schoner
26. Januar 2016 um 13:23 Uhr
1) einfacher zu merken, allgemeinerer Weg 2) keine Sorge, die Eingabetaste zu drücken, bevor Sie den Dateinamen eingeben
– Roman Susi
10. Januar 2017 um 19:03 Uhr
Gemeinschaft
Ich hatte gerade das gleiche Problem und fand diese Antwort am einfachsten zu verstehen (commit-ref ist der SHA-Wert der Änderung im Protokoll, zu dem Sie zurückkehren möchten):
git checkout [commit-ref] [filename]
Dadurch wird diese alte Version in Ihrem Arbeitsverzeichnis abgelegt und Sie können sie von dort aus übertragen, wenn Sie möchten.
Was ist der Unterschied zwischen diesem (git checkout HEAD file/to/restore) und git reset –hard file/to/restore ???
– Motti Schoner
26. Januar 2016 um 13:23 Uhr
1) einfacher zu merken, allgemeinerer Weg 2) keine Sorge, die Eingabetaste zu drücken, bevor Sie den Dateinamen eingeben
– Roman Susi
10. Januar 2017 um 19:03 Uhr
Chim
Wenn Sie wissen, wie viele Commits Sie zurückgehen müssen, können Sie Folgendes verwenden:
git checkout master~5 image.png
Dies setzt voraus, dass Sie sich auf dem befinden master Branch, und die gewünschte Version ist 5 Commits zurück.
9866300cookie-checkWie kann ich eine Datei auf eine bestimmte Revision zurücksetzen oder wiederherstellen?yes
Nach dem Zurücksetzen nicht vergessen
--cached
beim prüfengit diff
. Verknüpfung– Geoffrey Hale
2. Dezember 2015 um 19:20 Uhr
Ich habe deine Frage gefunden, als ich meine gegoogelt habe. Aber nachdem ich die Lösung gelesen hatte, überprüfte ich mein Protokoll und fand heraus, dass ich die Änderungen als eigenständiges Commit vorgenommen hatte, also machte ich git revert für dieses Commit, und alles andere blieb so, wie ich es wollte. Keine Lösung, nur eine andere Möglichkeit, es manchmal zu tun.
– sudo97
8. August 2017 um 14:08 Uhr
Ich verwende diese manuelle Lösung: $ git revert, entstash dann die gewünschten Änderungen und lade dann diese gewünschten Änderungen in einen neuen Commit hoch.
– Absicht
14. Juli 2021 um 18:19 Uhr