2014-04-26 79 views
2

的git的樱桃挑选我有两个分支:git的变基VS分离分支

  1. TMP

tmp分支分离
我需要把tmp分支之上master与解决冲突的优先顺序tmp

当我d Ø

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有什么不同或者我该怎么做?

回答

2

A rebase通过移动后的所有提交完成某个提交:这里是在0a722ac的父项之后。

一个cherry-pick需要提交列表并复制它们:0a722ac..384144a

由于0a722ac^是无法访问的(是这样的话,例如,对于孤儿的分支,其中0a722ac将是第一个提交),rebase将失败,cherry-pick(不需要访问0a722ac的父项)将成功。

查看更多的“How to cherry pick a range of commits and merge into another branch”。

7

由于您没有明确地告诉它该开始哪个提交,并且因为您确实明确告诉它调用了合并,所以它正在寻找rebase合并基地。告诉它不要打扰,只取了整支,指定--root

git checkout tmp 
git rebase --strategy=recursive -X theirs --root master 

cherry-pick没有做什么你认为它没有。 ..构造的意思是“不是左边的提交或任何可以从它得到的东西......”,特别是在这种情况下,它的意思是“不是0a722ac”。它没有选择整个分支。由于樱桃挑选是为期望单次提交而构建的,因此您必须明确指定一个范围,此处的做法是将排除集简单地设为HEAD(因为HEADtmp没有任何共同之处,因此不会排除任何内容) :

git checkout master 
git cherry-pick --strategy=recursive -X theirs ..tmp 

在范围指定的不对称性仅仅是一个两个命令最常见的用法的后果:底垫适用于整个当前分支的,而摘樱桃通常用于一个或多个单提交..


不是很聪明,但基础重建分支用自己的复杂的合并历史批发(线性整支底垫中正常工作)会痒所以很少人我怀疑你将能够鼓希望能够帮助划伤它。

+0

+1比我的答案更完整。 – VonC