2016-01-13 37 views
1

我有两个提交B和C.C是B的固定版本,但不是随着B被修改的后继。 我想将此修补程序应用于最后一次提交的另一个分支A. 如何才能做到这一点,理想情况下不需要中间修补程序文件?Git:如何区分两个提交并将该差异应用于第三个提议

C 
| B 
|/ 
. 
. A <-- I want to apply diff from B to C here. 
|/ 

我以为它可能是git cherry-pick --no-commit B C但没有。

回答

0

一种方法是变基到B,然后樱桃挑所得C′(“C素”)AC′只有C的更改尚未在B中。

视觉:

C′ 
C | 
| B 
|/ 
. 
. C″ 
. | 
. A 
|/ 

命令:

$ git rebase --onto B C^ C 
# Fix conflicts that may occur and commit. 
$ git tag C-prime 
$ git checkout A 
$ git cherry-pick C-prime 
# Again, fix conflicts because Git can be a little dumb sometimes (by design!) 

在上面,我只是假设所有的字母标识符是标签,没有分支,让我解释没有标识符改变他们指向的提交。实际上,您可能不需要git tag …命令。

0

不幸的是,没有这种开箱即用的命令。有像git read-tree -m这样的低级命令,但它们不提供任何可用的冲突解决方案。

最实际的方法是做一个从B到C的假冒,然后挑选它。这些命令做到这一点:

$ git checkout A 
$ git cherry-pick --edit $(echo temporary | git commit-tree -p B C^{tree}) 

(指树对象的方式来自man gitrevisions

相关问题