Wie kann ich zu einem bestimmten Git-Commit wechseln, ohne alle danach vorgenommenen Commits zu verlieren ?
Ich möchte, dass lokale Dateien geändert werden, aber die Datenbank der Commits bleibt intakt. Nur der aktuelle Positionszeiger wird auf das aktuell ausgewählte Commit gesetzt.
Ich möchte den Dateistatus in ein bestimmtes Commit ändern, das Projekt ausführen und nach Abschluss die Dateien wieder auf das letzte Commit zurücksetzen.
Wie geht das, ohne den gesamten Projektordner zu komprimieren?
Antworten:
Wenn Sie in einer bestimmten Filiale sind
mybranch
, fahren Sie einfach fort undgit checkout commit_hash
. Dann können Sie mit zu Ihrer Filiale zurückkehrengit checkout mybranch
. Ich hatte das gleiche Spiel, das heute einen Fehler halbiert :) Außerdem solltest du etwas über Git-Halbierung wissen .quelle
git checkout commit_hash
wenn Sie sich in einem sauberen Repository befinden und keine Verzweigung durchführen müssen. Könnte für einige Anwendungsfälle (wie meine) einfacher sein.git bisect
Referenz; Was für ein äußerst nützliches Werkzeug!Verwenden Sie zunächst
git log
, um das Protokoll anzuzeigen, das gewünschte Commit auszuwählen und den sha1-Hash zu notieren, mit dem das Commit identifiziert wird. Als nächstes laufengit 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.quelle
git checkout <original_branch>
.git checkout HEAD
ist effektiv ein NOOPgit reset --hard <hash>
Ändert den HEAD des aktuellen Zweigs, währendgit checkout <hash>
Sie eine getrennte Kasse erhalten, die keinen Zweig ändert, und Sie können problemlos zurückkehren, ohne die ursprüngliche Hash-ID Ihres Zweigs zu kennen, wie in dieser Antwort gezeigt.Zusätzlich zu den anderen Antworten hier, die Ihnen zeigen, wie
git checkout <the-hash-you-want>
es sich lohnt zu wissen, können Sie wieder zu Ihrem Verwendungszweck wechseln:Dies ist oft bequemer als:
Wie Sie vielleicht erwarten,
git checkout @{-2}
kehren Sie zu der Filiale zurück, in der Sie vor zweigit checkout
Sekunden waren, und dies gilt auch für andere Nummern. Wenn Sie sich erinnern können, wo Sie für größere Zahlen waren, sollten Sie eine Art Medaille dafür bekommen.Leider
git checkout @{1}
führt Sie die Produktivität nicht zu der Branche, in der Sie in Zukunft tätig sein werden, was eine Schande ist.quelle
git checkout -
ein Kurzalias fürgit checkout @{-1}
@{n}
Syntax zu kennen , da sie mit vielen Git-Befehlen funktioniert. Es fiel mir schwer, Ihre Kurzschrift hinzuzufügen, ohne die Antwort ziemlich verwirrend zu machen. Stattdessen habe ich Ihren Kommentar abgestimmt - ich hoffe, die Leute werden ihn sehen. Danke noch einmal.git merge -
um den zuletzt ausgecheckten Zweig mit dem aktuell ausgecheckten Zweig zusammenzuführen. Es ist wiecd -
in Bash.