我有一个有两个分支的项目:
D---E branch1
/
---A---C branch2
我想在branch2之上应用commit E(但不是D)。
我使用 git cherry-pick 和 git mergetool (与 meld )来解决冲突。到现在为止还挺好。
但是,假设提交C后的文件状态为
lineC1
<context C>
lineC2
并且提交E引入的更改是
-lineC1
+lineE1
<context E>
-lineC2
+lineE2
我希望mergetool默认显示的结果是
lineE1
<context C>
lineE2
(即,E1和E2行根据提交E而改变,但内部上下文保留在当前分支中)。
相反,默认情况下,mergetool(即meld)显示:
lineC1
<context E>
lineC2
这真的没有意义。
如何指示git cherry-pick保留来自branch2的上下文,并且只考虑对commit E修改的行的更改?
答案 0 :(得分:2)
通常没有正确的合并解决方案,程序只能提供启发式建议。如果建议不是您需要的,您只需要编辑它。我认为meld应该在屏幕上显示你需要的一切。即使它不是,您也可以使用git show <sha1>:<file>
之类的命令来显示文件的每个现有版本以进行复制粘贴。在meld git中编辑中间列后,无论你做了什么更改,它都会按原样接受它。
您可能还想尝试git config --global --add merge.conflictstyle diff3
在下一个挑选(或合并)中,冲突的结果将有所不同,并且运气更适合您的情况。
答案 1 :(得分:0)
您可以尝试使用不同的合并策略或不同的策略选项作为默认策略(递归)。
查看git merge --help
,MERGE STRATEGIES部分。
我有一个类似的问题,虽然它没有涉及你的上下文差异,并使用策略选项theirs
(标记-Xtheirs
)