我有一个有两个分支的项目:
D---E branch1
/
---A---C branch2
我想在branch2之上应用提交E(但不是D)。
我使用gitcherry-pick和git 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/