Git Cherrypick时,已修改原文件为何仍能精准定位更新行?
Git Cherry-Pick 无冲突合并的原理
Git处理cherry-pick这类合并操作时,核心逻辑是对比三个版本的文件内容——你与上游仓库的共同祖先版本、你当前本地的版本、要cherry-pick的上游提交版本,以此判断两处修改是否存在冲突。
咱们把你的场景拆解为三个关键版本:
- 共同祖先版本(你fork时的初始文件):
whatever pizza pasta pesto
- 你的本地修改版本:
whatever banana pasta pesto
- 上游提交的目标版本:
whatever pizza pasta cheese pesto
再看两处修改的具体范围:
- 你的修改:仅改动第2行,将
pizza替换为banana - 上游的提交:在
pasta与pesto之间插入cheese,未触碰第2行内容
这两个修改完全没有重叠的行或相互影响的范围,Git能自动识别出这是两个独立的修改操作,因此直接将它们合并,得到你预期的结果:
whatever banana pasta cheese pesto
只有当两处修改涉及同一行(比如你和上游都改了第2行),或者修改的行范围存在重叠(比如你在第2-3行添加内容,上游也在该区间修改)时,Git才会触发冲突提示,需要手动介入解决。
内容的提问来源于stack exchange,提问作者Álvaro Franz
相关产品推荐
相关产品推荐

