在一个项目中,我有dev
分支与master
保持同步。
我想将dev
分支更改带到分支past-master
,这基本上是在先前提交时停止的master
版本。
我在git rebase dev
上尝试了past-master
,但在应用分支之前重播了past-master
和master
之间的所有提交。
git cherry-pick A^..B
,其中A是第一个dev
提交而B是past-master
上的最后一个提交,由于某种原因而失败。
进入dev
分支并运行git format-patch past-master
生成所有提交补丁,然后在dev
上逐个应用past-master
分支中的补丁,但感觉不错非常不理想。
有一个很好的方法吗?
答案 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