2011-01-16 12 views
2

Ich möchte eine Zwischenmischung (entfernen, nicht Squash) entfernen und dann die letzten 2 Commits in einen neuen Zweig verschieben.Wie entfernt man eine Zwischenmischung in git?

Dies ist meine aktuelle git log --graph:

* 3a5c453 - (2 hours ago) last commit (HEAD, master) 
* b6c19f1 - (2 hours ago) Merge branch 'tade' into HEAD 
|\ 
* | be356d0 - (2 hours ago) previous commit 
| * 65328dc - (3 hours ago) some other commit in branch tade 

Ich möchte mit diesem am Ende:

* bbbbbbb - (some time in the future) a later commit on tade (tade) 
* | aaaaaaa - (some time in the future) a later commit on master (master) 
| * | 3a5c453 - (2 hours ago) last commit (HEAD, newone) 
| * | be356d0 - (2 hours ago) previous commit 
|/ | 
| * 65328dc - (3 hours ago) some other commit in branch tade 

Ich dachte an git rebase -i mit der Zusammenführung mit dem Zweig tade zu entfernen und dann eine git branch newone und git reset --hard HEAD^2, um die letzten 2 Commits in den neuen Zweig zu verschieben. Als ich aber die Rebase gemacht habe, hat sie mir alle Commits vom Tade-Zweig gezeigt, die in Master und | zögerte, sie zu löschen.

Gibt es einen besseren Weg oder sollte ich damit fortfahren?

BEARBEITEN: Ich aktualisierte den beabsichtigten Zustandsgraphen, um es klarer zu machen. Die 2 neue commit (aaaaaaa und bbbbbbb) gibt es nur den Zustand zu veranschaulichen ein wenig besser (ich hoffe)

+0

Ich bin wirklich verwirrt durch diese vertikalen Linien in Ihrem gewünschten Ergebnis. Gibt es da oben noch etwas anderes, auf dem Ast Tade und auf ... was auch immer implizierte Zweig ist ganz links? – Cascabel

+0

Es wäre auch hilfreich, wenn Sie Ihren aktuellen HEAD mit einem tatsächlichen Zweignamen versehen und uns sagen würden, wie genau Sie 'rebase -i' aufgerufen haben. – Cascabel

+0

Sorry, ich bin neu in der git log --graph Ausgabe. Ich werde die Grafik ändern, um den beabsichtigten Zustand zu verdeutlichen. – Kostas

Antwort

1

Nutzung interaktiver Rebasieren 3a5c453 auf be356d0 anstelle der Zusammenführung rebase begehen b6c19f1 (dh nur die 3a5c453 ein begehen nach unten bewegen). Dann sollten Sie etwas davon haben:

* xxxxxxx - (2 hours ago) Merge branch 'tade' into HEAD 
|\ 
* | yyyyyyy - (2 hours ago) last commit (HEAD) 
* | be356d0 - (2 hours ago) previous commit 
| * 65328dc - (3 hours ago) some other commit in branch tade 

Dann können Sie einfach erstellen neue Filialen:

git checkout -b newbranch yyyyyy 

Dann können Sie xxxxxx löschen und etwas an den Master begehen und damit am Ende:

* zzzzzz - new commit on master 
| * | yyyyyyy - (2 hours ago) last commit (HEAD) 
| * | be356d0 - (2 hours ago) previous commit 
| | * 65328dc - (3 hours ago) some other commit in branch tade 
+0

Wenn ich die interaktive Rebase mache, bekomme ich eine Menge Commits (vom Tade-Zweig) zwischen meinen 2 Commits. Soll ich sie einfach alle unten bewegen? – Kostas

+1

Versuchen Sie 'rebase -i 65328dc' und es sollte nur diejenigen zwischen' 65328dc' und dem aktuellen HEAD geben. – poke