2016-03-29 11 views
0

Wir verwenden git rebase --onto, um Commits von einem Zweig zu einem anderen Zweig abzuholen. Lassen Sie uns aus Gründen der Einfachheit den Zweig zum Release Branch entwickeln.Git Rebase auf mit mehreren Revisionssets

1----A----B----C----D----2----3----E----F---G----H----4----5----6 develop 

Aus der oben genannten ich brauche von in Release entwickeln alle „Zeichen“ Revisionen zu fusionieren, ist es wichtig zu beachten, dass ich die numerischen Revisionen ignorieren müssen.

Also, was wir tun, ist die Rebase für jede Gruppierung auf. Zum Beispiel in der oben gibt es zwei Gruppen A bis D und E bis G.

git rebase --onto release 1 D #rebase the first range of revisions from the develop branch and base it on the release branch 

git rebase --onto release 3 H #rebase the second range of revisions from the develop branch and base it on the release branch. 

Das Problem ist, dass für jede Gruppierung müssen wir diesen Befehl ausführen, die nicht bequem ist.

Gibt es eine Möglichkeit, dass ich git rebase --onto einmal laufen konnte und alle erforderlichen Änderungen dann in einem einzigen Befehl angeben

+0

Es gibt eine Menge Möglichkeiten, fusionieren, dies zu tun, was Sie haben hier ist nur die unbequemste. Am einfachsten ist möglicherweise interaktive Rebase und löschen Sie diejenigen, die Sie nicht möchten. – jthill

+0

In der Tat, nur 'git Rebase -i - auf Release 1' gefolgt von der Auswahl der Patches, die Sie wollen, wird funktionieren, wenn es Ihnen nichts ausmacht, es in EDITOR statt in einer Shell zu tun. – amalloy

+0

Rebase ist das falsche Werkzeug für die Auswahl guter ("Cherry") Commits von einem Zweig in einen anderen. Der Befehl "git cherry-pick" macht genau das: Sie identifizieren die zu pflückenden Kirschen und sie nehmen sie auf (kopieren). – torek

Antwort

3

Gibt es eine Möglichkeit, dass ich einmal git rebase --onto und alle erforderlichen angeben laufen konnte Revisionen dann in einem einzigen Befehl

Ich würde vorschlagen, stattdessen git cherry-pick zu verwenden.
Verwenden Sie die cherry-pick mit einem commit range und Sie können so viele Bereiche passieren, wie Sie

# set the range of commits you are interested in 
# A should be older than B. 
cherry-pick A..D E...H 

wünschen und es wird die angegebenen Bereiche in Ihrem aktuellen Zweig