git cherry-pick时如何用冲突标记高亮所有变更以手动确认?
如何让git cherry-pick强制生成冲突标记以便手动确认所有变更
首先纠正一个误区:--no-ff是git merge的专属选项,用于禁止快进合并,对git cherry-pick完全无效,所以你之前的尝试没效果是正常的。
如果你希望将目标提交的所有变更都以冲突标记(<<<<<<<这类)的形式展示,方便手动确认每一处修改,可以按以下步骤操作:
方法一:用补丁+三方合并强制生成冲突标记
导出目标提交的补丁
把指定提交的变更导出为补丁文件:git show <commitId> > cherry-pick-patch.diff以三方合并模式应用补丁
使用git apply的--3way选项,这个选项会基于当前分支、目标提交和它们的共同祖先做三方合并,只要存在差异就会生成冲突标记:git apply --3way cherry-pick-patch.diff执行后,所有有差异的文件都会出现类似冲突的标记,你可以直接在文件里编辑,确认保留哪部分内容。
方法二:cherry-pick暂存+手动对比生成冲突
如果你更习惯用cherry-pick的流程:
应用变更但不提交
用-n(--no-commit)选项执行cherry-pick,这样变更会被应用到工作区和暂存区,但不会自动创建新提交:git cherry-pick -n <commitId>取消暂存并生成冲突标记
先重置暂存区,把变更放回工作区:git reset HEAD然后对每个变更的文件,用
git merge-file强制生成包含双方内容的冲突标记(以example.txt为例):# 获取共同祖先版本 git show $(git merge-base HEAD <commitId>):example.txt > ancestor.txt # 获取当前分支版本 git show HEAD:example.txt > current.txt # 获取目标提交版本 git show <commitId>:example.txt > target.txt # 强制合并生成带冲突标记的文件 git merge-file -p current.txt ancestor.txt target.txt > example.txt执行后,
example.txt里会出现冲突标记,你可以手动编辑确认。
处理完所有文件后,用git add .暂存修改,再用git commit完成提交即可。
内容的提问来源于stack exchange,提问作者Klops
相关产品推荐
相关产品推荐

