将分支应用于过去的提交

时间:2016-02-12 18:21:22

标签: git

在一个项目中,我有dev分支与master保持同步。

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

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

进入dev分支并运行git format-patch past-master生成所有提交补丁,然后在dev上逐个应用past-master分支中的补丁,但感觉不错非常不理想。

有一个很好的方法吗?

1 个答案:

答案 0 :(得分:0)

阅读有关rebase的联机帮助页应该清除这一切。 有三个提交:HEAD,上游和上。

它适用的提交是上游...... HEAD。它将应用于 分支。如果没有--onto,则设置为上游。但你想要这个:

HEAD:dev

上游:主人

on:past-master

git rebase --onto past-master master dev

该联机帮助页中有这个确切的示例。唯一的区别是,从master可以访问past-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