gitcherry-pick : how consider only lines modified by the commit (i. e.,不是周围的上下文)?

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

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

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

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

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

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

lineC1
<context C>
lineC2

提交 E 引入的更改是

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

我希望 merge 工具默认显示的结果是

lineE1
<context C>
lineE2

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

相反, merge 工具(即 meld)默认显示:

lineC1
<context E>
lineC2

这确实没有任何意义。

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

最佳答案

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

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

在下一次挑选(或 merge )中,冲突结果的格式将略有不同,幸运的是更适合您的情况。

关于gitcherry-pick : how consider only lines modified by the commit (i. e.,不是周围的上下文)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18871750/

相关文章:

Github无法 merge 分支,没有冲突,手动它会自动 merge

visual-studio - 与 Visual Studio 一起使用 Meld

git - 使用 meld 作为 diff 工具时查看 git 过滤器输出

git - 撤消 GIT Stage 并恢复本地更改

git - merge 除一个之外的所有提交的最佳方法

git - 当两个分支不同但两个分支中都没有新提交时,为什么 git merge 不更改?

linux - 需要一个 UI 工具来比较来自 Windows 服务器的 2 个 Linux 文件夹

git - 如何硬删除 git 中的孤立提交?

git - nbstripout : what does `diff=ipynb` do in . gitattributes?

git - 如何设置 GoCD 来处理使用 SSH key 进行身份验证的私有(private) git 存储库?