Ich versuche das Äquivalent von svn Revert
in Git zu finden. In svn
, wenn ich mit der rechten Maustaste auf eine Datei klicke, klicke auf revert
, um alle lokalen Änderungen rückgängig zu machen. Die Datei kehrt zum letzten commit
zurück. Ich kann den gleichen Befehl in Git nicht finden. Da ich neu bin, will ich meine Arbeit nicht vermasseln.
Sagen wir, ich habe einen Commit Init gemacht. Dann habe ich ein paar Änderungen vorgenommen. Jetzt möchte ich zurück zum Init -Zustand.
Danke für Ihre Hilfe
Wegen des Staging-Bereichs ist es nicht ganz so einfach wie ein svn revert
. Abhängig davon, was Sie getan haben und was Ihr Ziel ist, müssen Sie entweder git checkout
oder git reset
verwenden. Sie müssen jedoch mit git reset
vorsichtig sein, da Sie den Verlauf neu schreiben und Arbeit verlieren können.
Nehmen wir an, Sie haben das Commit-Diagramm:
%Vor% Und du bist momentan bei D
mit einigen Änderungen. Um einfach alle Änderungen (inszeniert oder nicht) zu verwerfen, können Sie git reset --hard HEAD
oder git reset --hard D
verwenden. Beide setzen den Status Ihrer Arbeitskopie zurück.
Wenn der Status Ihrer Arbeitskopie mit A
identisch sein soll, aber die commits B
und C
nicht verloren gehen, dann sollten Sie: git checkout A -- .
vom Anfang Ihrer Arbeitskopie verwenden. Dadurch wird der Status Ihrer Arbeitskopie auf den Inhalt von A
gesetzt. An diesem Punkt ist Ihr Arbeitsbaum schmutzig, also müssen Sie sich verpflichten, die Tatsache aufzuzeichnen, dass Sie zurückgehen wollten. Das Commit-Diagramm an diesem Punkt wäre:
Dabei ist A'
ein neues Commit (mit einer anderen ID), das Ihre Arbeit wieder in das Äquivalent von commit A
bringt.
Wenn Sie commit B
und C
verlieren möchten, können Sie git reset --hard A
verwenden. Dadurch wird der Verzweigungszeiger zurück in das Commit A
verschoben. Du schreibst jetzt Geschichte neu, also sei vorsichtig. Wenn Sie mit anderen Teammitgliedern in diesem Zweig arbeiten, möchten Sie dies nicht tun. Wenn es sich um einen eigenen Zweig handelt, müssen Sie wahrscheinlich git push -f
verwenden, wobei -f
für --force
steht, wenn Sie es auf Ihr Remote-Repository verschieben. Sie müssen außerdem sicherstellen, dass push.default
auf current
oder upstream
gesetzt ist, um zu vermeiden, dass alle übereinstimmenden Zweige verschoben und die Arbeit eines anderen Benutzers versehentlich zurückgespult wird.
FWIW, ich habe einen Blogbeitrag über das Zurücksetzen von Änderungen in Git geschrieben vor einigen Jahren. Es ist noch heute relevant. Sie können es nützlich finden.
Erreicht Ihr HEAD
zurück zu Init
. Vielleicht möchten Sie zuerst eine Verzweigung oder ein Tag erstellen, um Ihre anderen Arbeiten zu speichern.
Möchten Sie eine Datei zurücksetzen und Ihre anderen nicht festgelegten Änderungen unverändert lassen? Du kannst nicht in git.
Öffnen Sie diese Datei und klicken Sie auf Rückgängig, bis sie nicht mehr in git status
angezeigt wird.