2014-02-11 6 views
8

Ich versuche, das Äquivalent von svn Revert in Git zu finden. In svn, wenn rigth-Klick ich eine Datei dann revert klicken, das alle lokalen Änderungen werden rückgängig gemacht werden. Die Datei geht auf die letzte commit zurück. Ich kann den gleichen Befehl in Git nicht finden. Da ich neu bin, möchte ich meine Arbeit nicht vermasseln.Was ist das SVN-Revert-Äquivalent in Git?

Let sagen, dass ich ein Init begehen gemacht. Dann habe ich ein paar Änderungen vorgenommen. Jetzt möchte ich zurück zum Init Zustand gehen.

Vielen Dank für

Antwort

6

Weil der Staging-Bereich ist es nicht ganz so einfach wie ein svn revert. Je nachdem, was du getan hast, und was du bist Ziel ist es, Sie müssen entweder git checkout oder git reset verwenden. Sie müssen jedoch mit git reset vorsichtig sein, da Sie Geschichte neu schreiben und Arbeit verlieren können.

Angenommen, Sie haben die Grafik begehen:

A <-- B <-- C <-- D 

Und Sie sind momentan in D mit einigen Änderungen. Um einfach zu verwerfen alle Änderungen (Stufen- oder nicht), können Sie git reset --hard HEAD oder git reset --hard D verwenden. Beides wird den Status Ihrer Arbeitskopie zurücksetzen.

Wenn Sie den Zustand Ihrer Arbeitskopie wollen A identisch sein, aber nicht verlieren Commits B und C, dann sollten Sie verwenden: git checkout A -- . von der Spitze der Arbeitskopie. Dadurch wird der Status Ihrer Arbeitskopie auf den Inhalt von A festgelegt. An diesem Punkt ist Ihr Arbeitsbaum schmutzig, also müssen Sie sich verpflichten, die Tatsache aufzuzeichnen, dass Sie zurückgehen wollten. Die Commit Graph an dieser Stelle wäre:

A <-- B <-- C <-- D <-- A' 

Wo A' ist eine neue (mit einer anderen ID) verpflichten, die Ihre Arbeit zurück in die entsprechende bringt der A zu begehen.

Wenn Sie die COMMIT B und C verlieren möchten, können Sie git reset --hard A verwenden. Dadurch wird der Verzweigungszeiger zurück zum 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 Ihre eigene Niederlassung ist, müssen Sie wahrscheinlich git push -f verwenden, wo die -f steht für --force, wenn es um Ihre Remote-Repo schieben.Sie müssen auch sicherstellen, dass Sie entweder versehentlich die Arbeit von jemandem Zurückspulen. Alle vergleichbaren Zweige schieben zu vermeiden eingestellt haben push.defaultcurrent oder upstream und

FWIW, schrieb ich auf ein blog post about reverting changes in Git vor einigen Jahren. Es ist noch heute relevant. Sie können es nützlich finden.

+0

Vielen Dank. – Richard77

+0

Sie sind herzlich willkommen! – jszakmeister

1
git reset --hard Init 

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

7

Solange die Dateien nicht in Szene gesetzt werden Normalerweise verwende ich

git checkout -- . 

Sie auch

git checkout HEAD -- path/to/some/file.txt 

zur Kasse eine einzelne Datei aus HEAD verwenden können, oder jede andere begehen