web-dev-qa-db-de.com

Wechseln Sie die Arbeitskopie vorübergehend zu einem bestimmten Git-Commit

Wie wechsle ich zu einem bestimmten Git-Commit ohne alle danach gemachten Commits zu verlieren?

Ich möchte, dass lokale Dateien geändert werden, aber die Commit-Datenbank bleibt erhalten, nur der aktuelle Positionszeiger wird auf den aktuell ausgewählten Commit gesetzt.

Ich möchte den Dateistatus in ein bestimmtes Commit ändern, das Projekt ausführen und, wenn ich fertig bin, die Dateien bis zum letzten Commit wiederherstellen.

Wie geht das, ohne den gesamten Projektordner zu komprimieren?

228
Paul

Wenn Sie sich in einer bestimmten Filiale befinden mybranch, machen Sie einfach weiter und git checkout commit_hash. Dann können Sie mit git checkout mybranch Zu Ihrer Filiale zurückkehren. Ich hatte heute das gleiche Spiel, das einen Bug halbiert :) Außerdem solltest du etwas über git bisect wissen.

324

Erste Benutzung git log Um das Protokoll anzuzeigen, wählen Sie das gewünschte Commit aus und notieren Sie sich den sha1-Hash, mit dem das Commit identifiziert wird. Als nächstes starte git checkout hash. Nachdem Sie fertig sind, git checkout original_branch. Dies hat den Vorteil, dass der HEAD nicht verschoben wird, sondern lediglich die Arbeitskopie auf ein bestimmtes Commit umgeschaltet wird.

52
Femaref

Zusätzlich zu den anderen Antworten hier, die Ihnen zeigen, wie man git checkout <the-hash-you-want> Es lohnt sich zu wissen, dass Sie wieder zu dem Ort wechseln können, an dem Sie gearbeitet haben:

git checkout @{-1}

Dies ist oft praktischer als:

git checkout what-was-that-original-branch-called-again-question-mark

Wie Sie vielleicht erwarten, git checkout @{-2} bringt Sie zurück zu der Filiale, in der Sie zu zweit waren git checkouts vor und ähnlich für andere Zahlen. Wenn Sie sich erinnern können, wo Sie für größere Zahlen waren, sollten Sie eine Art Medaille dafür bekommen.


Leider für die Produktivität, git checkout @{1} bringt Sie nicht zu dem Zweig, auf dem Sie in Zukunft sein werden, was eine Schande ist.

9
Benjohn