2016-02-12 24 views
0

在一个项目中,我有一个dev分支,该分支最新为master将分支应用于过去的提交

我想将dev分支更改到分支past-master,这基本上是在先前的提交时停止的master版本。

我试过git rebase devpast-master但是在应用分支之前重播past-mastermaster之间的所有提交。
git cherry-pick A^..B其中A是第一个dev提交,B是最后一个在past-master,由于某种原因失败。

要在dev分支和运行git format-patch past-master产生的所有提交斑块,并从dev分支逐一past-master工程应用的,但感觉非常不理想。

有没有一个很好的方法来做到这一点?

回答

0

阅读关于rebase的manpage应该清楚了这一切。游戏中有三个提交:HEAD,上游和上。

它提交的提交是上游..HEAD。它将它们应用到分支上。如果没有 - onto,就会设置为上游。但你希望:

HEAD:开发

上游:主

到:过去的主

git rebase --onto past-master master dev 

的手册页中有这个确切的例子。唯一的区别是past-master的所有提交都可以从master获得,而在本例中,next有一些不可达的提交。但这不是障碍:

Here is how you would transplant a topic branch based on one branch to another, to pretend that you forked the topic branch from the latter branch, using rebase --onto. 

    First let’s assume your topic is based on branch next. For example, a feature developed in topic depends on some functionality which is found in next. 

      o---o---o---o---o master 
       \ 
       o---o---o---o---o next 
            \ 
            o---o---o topic 

    We want to make topic forked from branch master; for example, because the functionality on which topic depends was merged into the more stable master branch. We want our tree to look like this: 

      o---o---o---o---o master 
       |   \ 
       |    o'--o'--o' topic 
       \ 
       o---o---o---o---o next 

    We can get this using the following command: 

     git rebase --onto master next topic 
+0

谢谢,按预期工作! – Eric