我有两个提交,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
但不是。
答案 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)