2010-12-05 3 views

Antwort

2

Um zu einer früheren Version zu verschieben:

git checkout <version hash>

tun, um Ihre Arbeit hier und begeht es mit

git commit --amend

Um zurück zu Master zu gehen:

git checkout master

+1

Das wird nicht funktionieren. 'git reset --hard' zeigte seinen Master-Zweig zurück auf den alten Commit, so dass' git checkout master' nichts unternimmt. – jtdubs

+0

Stimmt, danke für die Korrektur. +1 an Sie, würde auch meine Antwort entfernen, aber ich denke, der 'commit --amend' Schritt ist nützlich genug –

+0

Was ist' --amend'? – Shafizadeh

8

Sie können einfach git checkout <commit-id> tun, was immer Sie tun müssen, dann git checkout master, um zu dem neuen Code zurückzukehren.

Wenn Sie tatsächlich den alten Code zu modifizieren, um sie zu lösen, dann sollten Sie sich vielleicht:

git checkout -b my_release <commit-id> 
... prepare code for release ... 
... release code ... 
git checkout master 
git merge my_release 

Auch kann ich nicht git flow genug empfehlen. Es macht das alles ganz einfach.

35

Ihre Frage ist unklar. Ich denke, was Sie fordern dies:

git push -f origin $old_commit_id:master

Was wird dies tun? Es wird den $old_commit_id Commit zu origin als der neue Kopf von master Zweig schieben.

Wenn es das ist, was Sie wollten, brauchen Sie Ihren lokalen Zweig überhaupt nicht zu berühren.

+0

Das führte zu einem "Master (Non-Fast-Forward)" Fehler für mich. @ jtdubs Lösung hat funktioniert. –

+2

Übergeben Sie einfach "-f", um es zu erzwingen - obwohl der Remote-Repo möglicherweise so konfiguriert ist, dass dies verboten ist. Ich habe die Antwort aktualisiert. –

+0

funktioniert nicht für mich, die akzeptierte Antwort tut aber – MobileMon

64

Wenn Sie wollen, dies zu tun und den Master zum vorherigen begehen zurückzukehren:

git checkout master~1   # Checkout previous commit on master 
git checkout -b new_master  # Create branch for new master 
git branch -D master    # Delete old master 
git branch -mv new_master master # Make new_master master 

Alternativ:

| (A) ---------> (B) ----------> (C) 
|        ^
|        (master) 

Sie:

git reset --hard master~1  # Reset current branch to one commit ago on master 
+0

Also ein Jahr später schaue ich mir das an und denke, das ist ein schrecklicher Weg, es zu tun. Naja, zumindest ist es leicht zu verstehen. –

+0

ja das ist, warum ich upvoted, einfach zu verstehen, vielleicht sollten Sie einen Link zu einem besseren Weg präsentiert haben? –

+0

Upvoted. Es funktionierte für mich – bFunc

7

ein wie so Graph begehen Unter der Annahme, möchte zuerst master auschecken und einen Zweig erstellen, der auf master curre verweist ntly ist:

git checkout master 
git branch pointer master 

wie dies jetzt aussehen:

| (A) ---------> (B) ----------> (C) 
|        ^
|      (HEAD, master, pointer) 

Nun, da Sie bereits auf master sind, werden sagen, dass wir die master Zweig zurückzublättern begehen zu bewegen:

git reset master~1 

Jetzt sollte master um ein Leerzeichen nach hinten verschoben werden, aber der Zweig pointer befindet sich immer noch auf dem letzten Commit:

| (A) ---------> (B) ----------> (C) 
|    ^   ^
|   (HEAD, master) (pointer) 

An dieser Stelle können Sie master zu einem Remote-Push, oder wo auch immer, dann schnell vorwärts es bis zum pointer Zweig wieder zusammenführen. Sie können den pointer Zweig an diesem Punkt töten:

git push origin master 
git merge --ff-only pointer 
git branch -D pointer 

Final:

| (A) ---------> (B) ----------> (C) 
|    ^   ^
|   [ origin/master ] (HEAD, master) 
+0

Wenn Ursprung/Master bei C ist, wird 'git push origin master' mit _der Spitze deines aktuellen Zweiges gescheitert sein remote counterpart_ Sie sollten auch eine -f-Flagge übergeben – sassospicco

+0

'git reset master ~ 1' war, was ich brauchte --- danke! – cxw

7

Verwendung git reset --hard <old commit number>

es wird die HEAD auf diesen alten zurückgesetzt begehen.

Zusätzlich müssen Sie git push -f origin verwenden, um auch den Remote-Repo zu ändern.

Verwandte Themen