2012-05-02 5 views
15

Sagen wir, ich habe einen Zweig Zweig, dessen gesamte Geschichte ich neu schreiben möchte, da es ursprünglich von Master für eine Pull-Anfrage erstellt wurde. Aus irgendeinem Grund ist es nicht einfach, oder offensichtliche git log mit dem Commit Hash bestimmen möchte ichInteraktive Rebase eines Zweiges mit seinem Punkt der Divergenz von Master

git rebase -i <commit> 

passieren Ich weiß, ich git merge-base <branch1> <branch2 || master> verwenden kann das sagen zu, dass zwei Referenzen finden können ihre Abstammung aus und verfolgen können verwenden um das Commit zu bestimmen. Was ich möchte, ist wissen, ob es eine bessere Art und Weise ist interaktiv diesen ganzen Zweig rebase (ob Master fortgeschritten ist oder nicht), als die Verwendung von

git rebase -i `git merge-base my_branch master` 

EDIT: Ich mag nicht, die Eltern von dem ersten ändern verpflichten in diesem Zweig so gemacht git rebase -i master würde nur in dem Fall arbeiten, in dem beide Master nicht fortgeschritten seit der Zweigstelle erstellt wurde und die Niederlassung erstellt wurde von der Commit-Master zeigt derzeit auf.

+0

Das ist keine Antwort, sondern ein interessanter Hack, den ich mir ausgedacht habe. Ich habe folgendes in mein Profil eingefügt. 'Funktion gri() { Git Rebase -i \' Git Merge-Basis $ @ Master \ '}' – Aaron

Antwort

12

Vielleicht bin ich Missverständnis Ihre Frage, aber ich denke, git rebase -i master sollte tun, was Sie wollen. Es wird die Merge-Basis herausfinden und den gesamten Zweig von diesem Punkt auf den aktuellen HEAD umstellen, so dass er von der aktuellen Spitze des Masters abgezweigt zu sein scheint.

Auch wenn Master nicht fortgeschritten ist, dann wird Rebasing ziemlich ein No-Op sein.

+0

Danke. Ich erkannte später, dass Git Rebase -i Master das tun würde, aber was wäre, wenn ich interaktiv rebase wollte, ohne den Kopf meines Zweiges zu ändern, um der aktuelle Leiter des Masters zu sein, falls sie nicht schon dasselbe waren. – Aaron

+0

Wenn Sie sich auf 'my-branch' befinden und' git rebase -i master' ausführen, wird nur die 'my-branch' ref aktualisiert - es wird nicht' master' aktualisiert. Die Neuberechnung verschiebt den Zweig _current_ an einen anderen Punkt auf dem übergeordneten Zweig des Zweigstellens (oder potenziell auf einen ganz anderen Zweigübergeordneten, wenn Sie "--onto" verwenden), ändert jedoch keine anderen Zweige. – twalberg

+0

Entschuldigung, ich denke, was ich meinte, ist es ein einfacherer Weg als das, was ich oben geschrieben habe, um eine Verzweigung zum Commit auf Master zu replizieren, ohne dass das Elternteil des ersten Commits der Verzweigung geändert wurde. – Aaron

Verwandte Themen