我有两个分支:
tmp
分支
我需要将tmp
分支置于master
之上,解决优先级为tmp
当我这样做时
git checkout tmp
git rebase --strategy=recursive -X theirs master
我收到了错误 首先,倒头重温你的工作......
fatal: Could not parse object '0a722ac51071ecb4d00b1ef45384aac227b942a0^'
Unknown exit code (128) from command: git-merge-recursive 0a722ac51071ecb4d00b1ef45384aac227b942a0^ -- HEAD 0a722ac51071ecb4d00b1ef45384aac227b942a0
当我这样做时
git checkout tmp
git cherry-pick --strategy=recursive -X theirs 0a722ac..384144a
工作正常
有什么不同或如何使用rebase做同样的事情?
答案 0 :(得分:7)
您收到rebase
错误,因为您没有明确告诉它哪个提交开始,并且因为您明确告诉它调用合并,所以它去寻找合并基础 1 。要告诉它不要打扰,只需要取整个分支,指定--root
:
git checkout tmp
git rebase --strategy=recursive -X theirs --root master
您的cherry-pick
没有按照您的想法行事。 ..
构造意味着"不是左边的提交或者它可以从中获得的任何东西......",特别是在这种情况下,它意味着"不是0a722ac"。它没有挑选整个分支。由于cherry-pick构建为期望单次提交,因此您必须明确指定范围,这里的方法是将排除集默认为HEAD
(因为HEAD
没有任何共同点使用tmp
,不会排除任何内容):
git checkout master
git cherry-pick --strategy=recursive -X theirs ..tmp
范围规范中的不对称性只是两个命令的结果。最常见的用法:rebase适用于整个当前分支,而cherry-pick通常用于一个或多个单一提交。
1 不是非常聪明,但是使用他们自己复杂的合并历史批发(线性全分支rebase工作得很好)的rebasing分支将会发痒所以很少有人怀疑你会成为能鼓起很多帮助划伤它的愿望。
答案 1 :(得分:2)
通过在某个提交之后移动所有提交来完成rebase:此处位于0a722ac
的父级之后。
A cherry-pick获取提交列表并复制它们:0a722ac..384144a
由于0a722ac^
无法访问(例如,对于孤立分支,其中0a722ac将是第一次提交),rebase将失败,挑选(不需要)访问0a722ac的父级将成功。
点击“How to cherry pick a range of commits and merge into another branch”了解更多信息。