Git cherry-pick指定提交为何冲突?如何仅添加目标提交内容?
Git Cherry-Pick冲突原因及解决方法
冲突原因
提交4是以提交3为基础创建的(即提交4的父提交是提交3),当你在当前master分支执行git cherry-pick 4时,Git会尝试将提交4相对于其父提交(提交3)的变更应用到master分支。但当前master分支的文件状态不包含提交3的内容(文件里没有"this is commit 3"这行),Git找不到提交4变更对应的上下文定位点,因此触发内容冲突。此时Git会把提交4对应的文件完整内容(两行文本)作为待合并内容,和当前master的空文件状态对比,最终导致冲突。
仅添加"this is commit 4"到master的方法
方法1:手动解决冲突后提交
- 打开冲突文件
onemoredoc.txt,文件内会出现类似如下的冲突标记:
<<<<<<< HEAD ======= this is commit 3 this is commit 4 >>>>>>> 4... add line with 4
- 删除冲突标记(
<<<<<<< HEAD、=======、>>>>>>> 4... add line with 4)以及不需要的"this is commit 3"行,只保留"this is commit 4",保存文件。 - 执行命令标记冲突已解决:
git add onemoredoc.txt
- 执行
git commit完成cherry-pick操作(Git会自动生成对应的提交信息,无需额外添加参数)。
方法2:用--no-commit选项手动调整变更
- 执行
git cherry-pick时加上--no-commit参数,让Git应用变更但不自动提交:
git cherry-pick 4 --no-commit
- 取消对冲突文件的暂存:
git reset HEAD onemoredoc.txt
- 恢复文件到当前master分支的原始状态:
git checkout --ours onemoredoc.txt
- 手动向
onemoredoc.txt中添加"this is commit 4"行,保存文件。 - 暂存变更:
git add onemoredoc.txt
- 提交变更:
git commit -m "add line with 4"
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

