Git revert单个中间commit出现冲突的原因及正确操作方法
冲突出现的原因
三次提交均为在文件末尾追加内容,Git执行git revert c34252时,会先匹配该提交修改的上下文范围:
c34252提交的原始改动是在<h1>1</h1>之后新增<h2>2</h2>,当时该位置的后续内容是文件结尾- 后续
c3425f提交又在<h2>2</h2>之后新增了<h3>3</h3>,c34252的修改上下文已经发生变化
Git无法自动判定移除<h2>2</h2>后,<h3>3</h3>的保留位置,因此触发冲突,并不是c34252提交本身包含<h3>3</h3>的改动。
仅移除第二个commit改动的方法
分两种场景选择操作:
场景1:分支未推送远端,可修改提交历史
使用交互式变基直接删除目标提交即可,无冲突:
- 执行命令:
git rebase -i c3425d(c3425d为目标提交的前一个提交哈希) - 在弹出的编辑界面中,将
c34252对应行开头的pick修改为drop,保存退出 - 变基完成后会自动移除
<h2>2</h2>的改动,最终文件仅保留<h1>1</h1>和<h3>3</h3>
场景2:分支已推送远端,不宜修改提交历史
手动解决当前冲突即可,操作成本极低:
- 编辑冲突文件,删除
<h2>2</h2>行,保留<h1>1</h1>和<h3>3</h3> - 执行
git add 对应文件名暂存修改 - 执行
git revert --continue完成revert操作即可
内容的提问来源于stack exchange,提问作者Asking
相关产品推荐
相关产品推荐

