来自多个分支的Git rebase没有得到改变

时间:2014-05-14 06:03:08

标签: git version-control merge branch branching-and-merging

在主分支中,我为一个项目创建了一个分支“topicA”,该项目只是原始文件的一个子集,添加了一些新文件。为此,我创建了分支,删除了不需要的文件,添加了一些新文件并提交了。

然后我创建了一个功能分支“topicB”并进行了一些更改。

             E--H--I       topicA
            /
           /     K--L--M   topicB
          /     /
A--B--C--D--F--J--N        master

我希望“topicB”中的更改应用于“topicA”。生成的树看起来像:

                         E--H--I   topicA
                        /
                 K--L--M           topicB
                /
A--B--C--D--F--J--N                master

我一直在尝试使用rebase,但一直无法获得理想的结果。

git checkout topicA
git rebase topicB

这导致合并和我解决的一些冲突,但并非所有来自topicB的更改都出现在新主题A中。

我也试过

git rebase --onto topicA master topicB

认为这会将topicB中的更改应用到topicA中,而master是共同的祖先,但最终我在topicB分支中进行了更改。

在我使用topicB的更改来修改master后,我希望能够从master重新定义topicA,以继续更改对topicA重要的文件。

是否可以从master分支,然后从另一个也从master分支的分支进行rebase? 我使用rebase错了吗? 这个用例合并会更好吗?

由于

更新 @VonC描述的rebase工作,现在我有一棵树:

                         E--H--I   topicA
                        /
                 K--L--M--O        topicB
                /
A--B--C--D--F--J--N                master

当我尝试再次从topicB重新定义topicA以获得新的更改时,我跑了

git checkout topicA
git rebase topicB

但是它要求我解决我已经解决的冲突问题,以便重新设置topicA并将其从M.分支出来。如何在不处理我已经解决的所有冲突的情况下将主题A更改为topicB'O'? / p>

1 个答案:

答案 0 :(得分:2)

rebase --onto应使用从中创建topicA的确切提交:

git rebase --onto topicB D topicA

请参阅that example以获取说明。

那会得到:

                         E'--H'--I'   topicA
                        /
                 K--L--M              topicB
                /  
A--B--C--D--F--J--N                   master

然后,是的,您可以在topicA

之上重新定位master
 git checkout topicA
 git rebase master