git rebase vs git cherry-pick of detached branch

But*_*GOL 2 git git-rebase git-cherry-pick

我有两个分支:

  1. TMP

tmp分支是分离的
我需要把tmp分支放在master优先解决冲突的顶部tmp

当我做

git checkout tmp
git rebase --strategy=recursive -X theirs master
Run Code Online (Sandbox Code Playgroud)

我得到了错误首先,重新回头重温你的工作......

fatal: Could not parse object '0a722ac51071ecb4d00b1ef45384aac227b942a0^'  
Unknown exit code (128) from command: git-merge-recursive 0a722ac51071ecb4d00b1ef45384aac227b942a0^ -- HEAD 0a722ac51071ecb4d00b1ef45384aac227b942a0  
Run Code Online (Sandbox Code Playgroud)

当我做

git checkout tmp
git cherry-pick --strategy=recursive -X theirs 0a722ac..384144a 
Run Code Online (Sandbox Code Playgroud)

工作良好

我有什么区别或如何使用rebase做同样的事情?

jth*_*ill 7

您收到rebase错误是因为您没有明确告诉它哪个提交开始,并且因为您明确告诉它调用合并,所以它寻找合并库1.告诉它不要打扰,只需要占用整个分支,指定--root:

git checkout tmp
git rebase --strategy=recursive -X theirs --root master
Run Code Online (Sandbox Code Playgroud)

cherry-pick没有按照自己的想法去做.该..构造意味着"不是左边的提交或从它可以到达的任何东西......",特别是在这种情况下,它意味着"不是0a722ac".它没有挑选整个分支.由于cherry-pick是为了期望单次提交而构建的,所以你必须明确指定一个范围,这里的方法是简单地将排除集默认为HEAD(因为HEAD没有任何共同点tmp,不会排除任何内容):

git checkout master
git cherry-pick --strategy=recursive -X theirs  ..tmp
Run Code Online (Sandbox Code Playgroud)

范围规范中的不对称性只是两个命令最常见用法的结果:rebase适用于整个当前分支,而cherry-pick通常用于一个或多个单一提交.


1不是非常聪明,但是使用他们自己复杂的合并历史批发(线性全分支rebase工作得很好)的折扣分支将会发痒所以很少有人怀疑你能够鼓起很多帮助划伤它的愿望.