2016-05-24 1 views
1

Ich begann eine interaktive Rebase und wählte zwei Commits von "später in der Geschichte", um zu versuchen, sie zu "früher in der Geschichte" zu schieben. Also versuche ich zu tun:Wie man ein Rebase-Commit hält und nicht nach den nächsten fragt?

E<-D<-C<-B<-A =>E<-B<-A<-D<-C

Der erste Satz (B) begehen beteiligt Arbeit verschmelzen, aber das ist jetzt geschehen. Es sieht also gut aus und ist am richtigen Ort. Aber dann, als ich rebase --continue tat, bekam ich eine Menge Konflikte für A. Ich erkannte, dass es eine tiefe Abhängigkeit von D hatte, die ich nicht bemerkte, und ich sollte nicht versuchen, es so zu bewegen.

Aber ich möchte nicht rebase --abort tun, weil die Arbeit auf B gut ist. Und ich will nicht --skip es, wenn das bedeutet, A vollständig zu werfen. : -/

Wie bitte ich es zu vergessen, das aktuelle Wrack einer laufenden Fusion für A, die ich fragte ... und tun, als ob B meine einzige Anfrage war? So, jetzt ich bin mit dem Ziel, das Fütterungsmaterial zu beenden und erhalten:

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

+2

Die kurze Version ist, dass Sie nicht können. Rebase funktioniert durch * Kopieren * von Commits, ohne sie zu verändern, also ist Ihre ursprüngliche 'E <-D <-C <-B <-A'-Kette immer noch da und Ihre neue' E <-B-Kette-so weit ist es auf einem * neuen * Zweig gebaut werden. Wenn Sie die Rebase beenden, wird die alte Kette verlassen und die Zweigmarke in die neue Kette verschoben. Wenn die Rebase abgebrochen wird, wird der neue Zweig vollständig gelöscht, wobei nur die alte Kette beibehalten wird, so [chorobas Antwort] (http://stackoverflow.com/a/37417645/1256452), die der neuen Kette einen neuen Namen hinzufügt , ist der Weg zu gehen. – torek

Antwort

3

Sie können eine Niederlassung auch in der Mitte eines Fütterungsmaterials erstellen. Nur

git checkout -b only-b 
git rebase --abort 
git checkout only-b 
+0

Hmmm ... was würde ich danach machen? Ich hätte fusioniert-B und dann die ursprüngliche Kette von commits mit unmerged-B immer noch drin ... beide Zweige unabhängig. – HostileFork

+0

@HostileFork: Sie können nun 'git checkout original' und 'git rebase E-commit - auf only-b-commit' setzen. – choroba

+0

Wenn ich eine Kette von Commits für eine Rebase erneut abspiele, werden dann nicht zwei Versionen von B angezeigt, die nach der Zusammenführung in Konflikt zueinander stehen? – HostileFork

Verwandte Themen