如何仅将两个分支之间的更改重新绑定到另一个分支

时间:2017-01-08 03:18:22

标签: git

git rebase很棒,唯一的问题是我想要一些略有不同的东西。假设我有branchA和master。并说我有3个提交给branchA的提交不属于主人。

主: 0 - > 1 - > 2

branchA: 0 - > 1 - > 2 - > 3 - > 4 - > 5

然后让我说我承诺掌握: 0 - > 1 - > 2 - > 6

现在当我改变时,branchA变为: 0 - > 1 - > 2 - > 6 - > 4 - > 5

但是,我想做一些与第三个分支有些不同的事情。我们称之为branchB

branchB:0 - > 1

并且假装我没有为branchA重新设置,所以它仍然看起来像: 0 - > 1 - > 2 - > 3 - > 4 - > 5

我基本上是在搜索一个命令或一组命令,这些命令或命令组允许我将master / branchA考虑在内以确定0 - > 1 - > 2是常见的提交,然后基于rebase到branchB。

一旦完成,

branchB应该看起来像这样:0 - > 1 - > 3 - > 4 - > 5

因为即使提交2同时存在于master和branchA中,提交1也是branchB中最接近的父级。

git中有这样的事情吗?

2 个答案:

答案 0 :(得分:2)

  

我基本上都在搜索一个命令或一组命令,这些命令或命令组允许我将0 -> 1 -> 2考虑在内,以确定branchB是常见提交,然后基于该rebase到{{ 1}}。

请参阅git merge-base

git rebase --onto B $(git merge-base master A) A

git merge-base master A会返回2 git rebase --onto B 2 A将重播B所有提交 2之后直至A的HEAD。

答案 1 :(得分:1)

如果只有少数提交需要处理,而您不需要自动解决方案,则可以使用cherry-pick。只需在目标分支上执行git cherry-pick commit即可将提交从另一个分支复制到当前分支。

另一种方法是使用git rebase -i。 Git会为您提供要重新设定的提交列表,并允许您编辑列表,以便您可以调整要重新定义的内容以及如何调整。

这两种方式或多或少都是手动的,但它们可能对一次性修复很有用。如果您需要自动解决方案,那么您可能会做错事。