git cherry-pick:如何仅考虑通过提交修改的行(即,不是周围的上下文)?

时间:2013-09-18 12:02:25

标签: git git-merge meld mergetool git-cherry-pick

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

     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修改的行的更改?

2 个答案:

答案 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

解决了它