2

我有两个分支:

  1. 掌握
  2. 时间

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 做同样的事情?

4

2 回答 2

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不是很聪明,但是用自己复杂的合并历史批发(线性全分支变基工作正常)重新设置分支会很痒,所以很少有人我怀疑你能鼓起很大的帮助来帮助它。

于 2014-04-26T15:12:34.490 回答
2

通过在某个提交之后移动所有提交来完成变基:在.0a722ac

挑选一个提交列表并复制它们:0a722ac..384144a

由于0a722ac^不可访问(例如,对于孤立分支,0a722ac 将是第一个提交),rebase 将失败,cherry-pick(不需要访问 0a722ac 的父级)将会成功。

在“如何挑选一系列提交并合并到另一个分支”中查看更多信息。

于 2014-04-26T12:43:05.217 回答