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中有这样的事情吗?
答案 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会为您提供要重新设定的提交列表,并允许您编辑列表,以便您可以调整要重新定义的内容以及如何调整。
这两种方式或多或少都是手动的,但它们可能对一次性修复很有用。如果您需要自动解决方案,那么您可能会做错事。