在下面的答案中,我假设当你从develop
分支出来时,你所做的第一件事是恢复这两个特性提交,然后你完成了你的实际开发工作。如果情况并非如此,我的答案应该仍然有帮助,尽管您需要采取一些额外步骤来解决您的情况。
也许你的问题的概念上最简单的解决办法是刚摘樱桃的非还原从新的分支提交到develop
:
git checkout develop
git cherry-pick B^..D
更换B
和D
与SHA-1提交的哈希值提交你想从新分支带入develop
。请注意,由于您正在将工作重新应用到其他基础上,因此可能会因此而导致合并冲突。
如果您感觉更冒险,也可以尝试使用git rebase --onto
。下面是说明你的新分支和develop
的当前状态的图:
develop ... ---A---B---C
\
newbranch R1---R2---D---E
你想从newbranch
上develop
顶部发挥D
和E
提交,而忽略那些R1
和R2
复归提交。换句话说,你想用这个来结束:
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
。由于C
与develop
的HEAD
一致,因此我们只是要求Git重新提交D
和E
的提交,依次为develop
的顶端。
如果你想Git的rebase --onto
的极好的解释,我建议你阅读由@Enrico这里给出了答案:
I can't understand the behaviour of git rebase --onto