2013-06-11 14 views
7
fusionieren

Ich habe diese Situation: seit einiger Zeit auf einige testBranch Arbeiten und ich wollte mit Master synchronisieren, damit ich git checkout testBranch und git merge Master did/testBranchUndo schnell git vorwärts

So jetzt meine Zweig wird mit Master synchronisiert, aber dann habe ich herausgefunden, dass ich diese Zusammenführung rückgängig machen möchte und das Problem ist, dass die Zusammenführung mit Fast Forward gemacht wird und jetzt mein Commit-Verlauf mit Master-Commits und TestBranch-Commits gemischt wird und ich nicht weiß, wie ich in den Status zurückkehren soll vor dem Zusammenführen auf meinem testBranch.

Vielen Dank für jede Hilfe

+0

Sind Commits von 'Master/testBranch' befindet * an der Spitze * Ihrer' testBranch' verschmolzen oder Sie haben es geschafft, bereits einige Ihrer eigenen lokalen Commits auf der Spitze zu notieren, was verschmolzen wurde? Davon hängt der Weg ab, sich zu erholen. – kostix

Antwort

4

Wenn Sie eine Revision kennen, in dem Sie Ihren lokalen testBranch wollen, ist es so einfach wie:

git checkout testBranch 
git reset --hard <revision> 

Wenn Sie Änderungen wie (älteste oben gemischt):

<point> 
<your_change_a> 
<change_from_someone_else> 
<your_change_b> 
<testBranch> 

Sie könnten:

git checkout testBranch 
git reset --hard <point> 
git cherry-pick <your_change_a> 
git cherry-pick <your_change_b> 
+1

Dies sollte funktionieren. Ich würde auch empfehlen, einen grafischen Git-Viewer wie gitg oder gitk zu verwenden, um einen guten Überblick über die Änderungen zu erhalten, die Sie rückgängig machen möchten. – RyPeck

+1

Danke für deine Antwort, aber ich habe eine andere Lösung gefunden (Ich habe deine nicht versucht, aber ich nehme an, es funktioniert). Lösung findet sich in diesem Blog: http://blog.tplus1.com/blog/2011/09/23/undo-a-fast-forward-git-merge/ ... hoffe es hilft jemand anderem :) :) –

16

git reflog show testBranch

sollte die Fast-Forward-Zusammenführung als letztes Element anzeigen ({0}). Nachdem sichergestellt ist dies der Fall ist, Kasse testBranch und führen Sie dann nur

git reset --keep [email protected]{1}

in den vorherigen Zustand zurückzukehren.

+0

Dies ist eine gute Antwort. Ich würde hinzufügen, dass es wichtig ist, sicherzustellen, dass Sie testBranch testen, bevor Sie 'git reset' ausführen. – jbll

+0

Ein leicht verständlicher und netter Ansatz! Dies sollte als Antwort markiert werden – anthonymonori