在主分支中,我为一个项目创建了一个分支“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>
答案 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