Git:如何区分两个提交并将该差异应用于第三个提交

时间:2016-01-13 11:13:20

标签: git diff

我有两个提交,B和C. C是B的固定版本但不是继承者,因为B被修改了。 我想将此修复应用于最后一次提交A的另一个分支。 我怎么能这样做,理想情况下没有中间补丁文件?

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

我认为它可能是git cherry-pick --no-commit B C但不是。

2 个答案:

答案 0 :(得分:0)

一种方法是重新定位到{% if (CurrentPageInfo.DocumentName == "FirstPage") {"Here is my first email body"} %} {% if (CurrentPageInfo.DocumentName == "SecondPage") {"Here is my second email body"} %} ,然后将生成的B (“C prime”)挑选到C′A仅包含C′中尚未包含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!) 命令。

答案 1 :(得分: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