Was ist die SVN-Umkehrung in git?

9

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

    
Richard77 11.02.2014, 04:42
quelle

4 Antworten

7

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:

%Vor%

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.

    
jszakmeister 11.02.2014, 09:13
quelle
7

Solange die Dateien nicht inszeniert sind, verwende ich normalerweise

%Vor%

Sie können auch

verwenden %Vor%

zum Auschecken einer einzelnen Datei aus HEAD oder einem anderen Commit

    
Daniel 11.02.2014 06:57
quelle
1
%Vor%

Erreicht Ihr HEAD zurück zu Init . Vielleicht möchten Sie zuerst eine Verzweigung oder ein Tag erstellen, um Ihre anderen Arbeiten zu speichern.

    
Carl Norum 11.02.2014 05:05
quelle
0

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.

    
Garry Gomez 21.03.2018 22:31
quelle

Tags und Links