2

我有一个有两个分支的项目:

     D---E branch1
    /
---A---C branch2

我想在 branch2 上应用提交 E(但不是 D)。

我使用git cherry-pickgit mergetool(使用meld)来解决冲突。到目前为止,一切都很好。

但是,假设提交 C 后文件的状态是

lineC1
<context C>
lineC2

并且提交 E 引入的更改是

-lineC1
+lineE1
<context E>
-lineC2
+lineE2

我希望mergetool默认显示的结果是

lineE1
<context C>
lineE2

(即,E1 和 E2 行根据提交 E 更改,但内部上下文保留在当前分支中)。

相反,默认情况下合并工具(即融合)显示:

lineC1
<context E>
lineC2

这真的没有意义。

如何指示 git cherry-pick 保留来自 branch2 的上下文,并且只考虑对提交 E 修改的行的更改?

4

2 回答 2

3

合并一般没有正确的解决方案,程序只能提供启发式建议。如果建议不是您需要的,您只需对其进行编辑。我认为融合应该在屏幕上显示你需要的一切。即使没有,您也可以使用诸如git show <sha1>:<file>显示文件的每个现有版本以进行复制粘贴之类的命令。在你编辑完 meld 中的中间列后,git 会按原样接受它,不管你做了什么改变。

您可能还想尝试git config --global --add merge.conflictstyle diff3

在下一次挑选(或合并)中,冲突结果的格式会有所不同,并且更适合您的情况。

于 2013-09-18T13:37:19.357 回答
0

You can try using a different merge strategy or different strategy options for the default strategy (recursive).

Take a look at git merge --help, section MERGE STRATEGIES.

I had a similar problem, although it did not involved that context difference of yours, and solved it using strategy option theirs (flag -Xtheirs)

于 2014-01-31T16:29:29.077 回答