从一个git分支移动到另一个git分支并仅应用我的更改

时间:2016-11-12 09:03:27

标签: git version-control merge

我已经分支了一个项目(来自分支A),似乎由于某种原因它继续在另一个分支(B)。

我尝试将我的fork(M)与新分支(B)合并,但这导致了很多冲突。冲突是因为新分支(B)分叉了较旧的分支(O),而A的部分变更未提交给B.

现在我希望我的所有更改(在分支M中)与新分支B合并而没有冲突,取消A对fork M中的原点O所做的所有更改。

enter image description here

我想要的是红色。我该怎么做?

2 个答案:

答案 0 :(得分:1)

一个选项是从M分支中挑选A提交之后发生的B分支中的提交范围:

git checkout B
git cherry-pick 2an38xma..f8s3kow2

此处2an38xmaA分支中M提交的SHA-1哈希或唯一标识符。您可以通过从git log分支键入A并向下滚动直到找到A提交来找到此提交哈希。 git cherry-pick中使用的范围表示在<{em> A提交之后逐个提交提交,直到f8s3kow2中的最终提交M为止分支。

请记住,每次提交都可能会出现合并冲突。

答案 1 :(得分:1)

首先使用M制作原始git branch M.old M分支的副本,这样如果最终结果不符合您的要求,您就可以重新开始。

然后你可以将你的M分支改为从B开始

git rebase --onto B A M

这应该可以为您提供图纸中的红色M分支。

A这里标记了您想要考虑更改的开始(不包括)和M端点(包括),它将更新为rebase结果。