Git Reset weich gegen hart


Antwort 1:

TL; DR

Schändlicher Plug, aber ich habe gerade einen Medium-Artikel dazu geschrieben

Ich schicke dich direkt dorthin

für eine ausführliche Antwort.

Richtige Antwort

Um den Hard-Reset ordnungsgemäß durchzuführen, sollten Sie Git Reflog verwenden.

Reflog ist wie ein großer Bruder Ihres Workflows. Es beobachtet jeden Schritt!

Das erstmalige Öffnen von Reflog ähnelt dem Herausfinden, wie viel Google über Sie weiß. Es ist ein bisschen gruselig, aber augenöffnend und oft - lebensrettend. Sie sind sich wahrscheinlich der Tatsache bewusst, dass Git Ihren Commit-Verlauf kennt - er wurde zu diesem Zweck erstellt. Aber ich ermutige Sie zu rennen:

Git Reflog

Verrückt oder? Nun, zumindest wenn Sie mit anderen Leuten an einem Projekt arbeiten, sollte hier viel gezogen, zusammengeführt, neu basiert, geklont und zwischen Zweigen gewechselt werden. Alles, was Sie mit Ihren festgeschriebenen Änderungen getan haben, finden Sie in diesem Reflog. Wenn Sie dies lesen, nachdem Sie etwas durcheinander gebracht haben, können Sie es wahrscheinlich einige Zeilen weiter unten sehen.

Im Reflog sehen Sie den aktuellen HEAD-Zeiger mit einem Versatz zu der spezifischen Git-Aktion, die Sie ausgeführt haben. Was ist der HEAD-Zeiger?

HEAD ist ein Zeiger oder eine Referenz auf das letzte Commit im aktuell ausgecheckten Zweig.

So ist beispielsweise HEAD @ {0} dasselbe wie nur HEAD, aber Sie können wahrscheinlich sehen, dass der letzte Moment, in dem alles in Ordnung war, wahrscheinlich einen größeren Versatz als diesen hat. Und das ist alles, was Sie wissen müssen, um aus diesen Schwierigkeiten herauszukommen!

Jetzt müssen Sie nur noch einen Punkt in diesem Reflog-Verlauf auswählen, zu dem Sie zurückkehren möchten, Reflog beenden (indem Sie einfach q eingeben) und ausführen:

Und das ist alles! Jetzt bist du zurück in dem Moment, den du ausgewählt hast. Ziemlich verdammt cool, oder?

Hoffe, dass Sie mit der Antwort zufrieden sind! Für weitere Informationen zu diesem Thema empfehle ich Ihnen dringend, dies zu überprüfen

dieser Artikel von mir

, weil es weiter ins Thema geht.



Antwort 2:

Es gibt keine Möglichkeit, das Zurücksetzen von Git vollständig rückgängig zu machen - hart, das ist der Grund, weil Sie Git-Reset niemals auf diese Weise verwenden sollten

Auf diese Weise können nur die Änderungen an Zweig und KOPF rückgängig gemacht werden

git reset --hard # git reset HEAD @ {1} #undo git stash

Wenn Sie nach dem Zurücksetzen Ihres Git viele Dinge gemacht haben - hart, dann sollten Sie Ihr Commit mit Reflog durchsuchen

Git Reflog für HEAD:

Git Reflog

Git Reflog für jeden Zweig:

Git Reflog

Suchen Sie das Commit sha und verwenden Sie es beim Zurücksetzen des Git:

Git zurücksetzen git stash

HINWEIS: Ich verwende normales Git-Reset und Git-Stash, da das normale Zurücksetzen sicher ist und den Inhalt der Arbeitskopie beibehält. Mit Stash können Sie das WC reinigen, indem Sie es auf HEAD zurücksetzen und das WC speichern. Dies ist der sichere Weg, um schnell zu reinigen WC (Sie können das WC mithilfe von Git Stash Pop wiederherstellen)

Vermeiden Sie also die Verwendung von git reset --hard, und verwenden Sie stattdessen git reset. git stash



Antwort 3:

Sie können git reset --hard nur dann rückgängig machen, wenn Sie vor dem Zurücksetzen alle Änderungen festgeschrieben haben. Es ist nichts, was Sie tun möchten, es sei denn, Ihr Arbeitsbaum ist so durcheinander (z. B. aufgrund einer verpfuschten Zusammenführung oder eines fehlgeschlagenen globalen Such- und Ersetzungsvorgangs), dass Sie ihn wegwerfen und zu einem früheren Status zurückkehren möchten.