2017-03-24 91 views
2

我有一个功能1,功能2和一些修复程序的开发分支。由于另一个开发原因,我们想从开发中创建另一个分支,并且只需要该分支中的修复,而不需要功能1和功能2.因此,我从开发中创建了一个分支并恢复了功能1和功能2的提交。现在我们在这个新分支中进行了一些开发。现在我想将这个分支与开发分支合并。但是我们需要开发分支中的功能1和2。但是,如果我们合并,那么功能1和2提交将从开发中移除。Git合并和未复原提交

那么在git中解决它的最好方法是什么?一种方法是获取功能1和2的更改并将其作为补丁应用于合并的开发分支。但问题是这两个功能有几个变化。

回答

2

在下面的答案中,我假设当你从develop分支出来时,你所做的第一件事是恢复这两个特性提交,然后你完成了你的实际开发工作。如果情况并非如此,我的答案应该仍然有帮助,尽管您需要采取一些额外步骤来解决您的情况。

也许你的问题的概念上最简单的解决办法是刚摘樱桃的非还原从新的分支提交到develop

git checkout develop 
git cherry-pick B^..D 

更换BD与SHA-1提交的哈希值提交你想从新分支带入develop。请注意,由于您正在将工作重新应用到其他基础上,因此可能会因此而导致合并冲突。

如果您感觉更冒险,也可以尝试使用git rebase --onto。下面是说明你的新分支和develop的当前状态的图:

develop ... ---A---B---C 
        \ 
newbranch   R1---R2---D---E 

你想从newbranchdevelop顶部发挥DE提交,而忽略那些R1R2复归提交。换句话说,你想用这个来结束:

develop ... ---A---B---C---D'---E' 
        \ 
newbranch   R1---R2---D---E 

您可以使用下面的命令来实现这一目标:

git checkout develop 
git rebase --onto C R2 E 

onto命令说要采取C为基地,并重播所有承诺其父母为R2(但不包括R2本身),直至并包括承诺E。由于CdevelopHEAD一致,因此我们只是要求Git重新提交DE的提交,依次为develop的顶端。

如果你想Git的rebase --onto的极好的解释,我建议你阅读由@Enrico这里给出了答案:

I can't understand the behaviour of git rebase --onto