Frage Zurücksetzen oder Zurücksetzen einer bestimmten Datei auf eine bestimmte Revision mithilfe von Git?


Ich habe einige Änderungen an einer Datei vorgenommen, die einige Male als Teil einer Gruppe von Dateien committed wurde, aber jetzt möchte ich die Änderungen auf eine vorherige Version zurücksetzen / zurücksetzen.

Ich habe eine gemacht git log zusammen mit einem git diff um die Revision zu finden, die ich brauche, aber ich habe einfach keine Ahnung, wie ich die Datei in den früheren Zustand zurückversetzen kann.


3443
2017-10-18 23:34


Ursprung


Antworten:


Angenommen, der Hash der gewünschten Commit ist c5f567:

git checkout c5f567 -- file1/to/restore file2/to/restore

Das Git Kasse Man-Seite gibt mehr Informationen.

Wenn Sie zuvor zum Commit zurückkehren möchten c5f567, anhängen ~1 (funktioniert mit beliebiger Nummer):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

Als Randnotiz habe ich mich immer mit diesem Befehl nicht wohl gefühlt, da er sowohl für gewöhnliche Dinge (Wechseln zwischen Zweigen) als auch für ungewöhnliche, destruktive Dinge (Verwerfen von Änderungen im Arbeitsverzeichnis) verwendet wird.


4654
2017-10-18 23:39



Sie können die an einer Datei vorgenommenen Änderungen schnell mit dem Befehl diff überprüfen:

git diff <commit hash> <filename>

Um dann eine bestimmte Datei auf diesen Commit zurückzusetzen, verwenden Sie den Befehl reset:

git reset <commit hash> <filename>

Sie müssen möglicherweise die verwenden --hard Option, wenn Sie lokale Änderungen haben.

Ein guter Workflow zum Verwalten von Wegpunkten besteht darin, mithilfe von Tags Punkte in Ihrer Zeitleiste sauber zu markieren. Ich kann deinen letzten Satz nicht ganz verstehen, aber was du willst, ist eine Verzweigung von einem früheren Zeitpunkt. Verwenden Sie dazu den praktischen Checkout-Befehl:

git checkout <commit hash>
git checkout -b <new branch name>

Sie können das dann gegen Ihre Mainline rebasen, wenn Sie diese Änderungen zusammenführen möchten:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

508
2017-12-17 06:59



Sie können einen beliebigen Verweis auf einen Git-Commit verwenden, einschließlich des SHA-1, wenn dies am bequemsten ist. Der Punkt ist, dass der Befehl so aussieht:

git checkout [commit-ref] -- [filename]


305
2018-04-07 21:48



git checkout -- foo

Das wird zurückgesetzt foo zu HEAD. Du kannst auch:

git checkout HEAD^ foo

für eine Revision zurück usw.


243
2017-08-29 20:56



Und um zur letzten festgeschriebenen Version zurückzukehren, die am häufigsten benötigt wird, können Sie diesen einfacheren Befehl verwenden.

git checkout HEAD file/to/restore

106
2018-01-14 06:15



Ich hatte das gleiche Problem gerade jetzt und ich 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 Ihr Arbeitsverzeichnis geschrieben und von dort aus können Sie es bei Bedarf übernehmen.


100
2018-05-27 17:52



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 auf der master Zweig, und die gewünschte Version ist 5 commits zurück.


85
2018-04-07 14:03



Ich glaube ich habe es gefunden .... aus http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html

Manchmal willst du einfach zurückgehen und jede Veränderung über einen bestimmten Punkt hinweg vergessen, weil sie alle falsch liegen.

Beginnen mit:

$ git log

Das zeigt Ihnen eine Liste der letzten Commits und deren SHA1-Hashes.

Geben Sie als Nächstes Folgendes ein:

$ git reset --hard SHA1_HASH

um den Status für einen gegebenen Commit wiederherzustellen und alle neueren Commits dauerhaft aus dem Record zu löschen.


75
2017-12-17 06:53



Das hat für mich funktioniert:

git checkout <commit hash> file

Dann bestätige die Änderung:

git commit -a

59
2017-08-25 22:12