Git cherry-pick引入目标提交前置代码行,引发冲突问题排查
Git Cherry-Pick出现非目标提交代码冲突的原因
以下是几种可能导致该问题的情况:
目标提交依赖前置提交的修改
你要cherry-pick的「added bar」提交,大概率依赖了前面「added foo」提交的代码变更——比如bar的实现调用了foo函数,或者两者在同一文件的相邻位置修改。Git执行cherry-pick时,会基于main分支当前的代码状态,尝试应用目标提交的diff。如果main分支里没有「added foo」的修改,Git计算diff上下文时就会出现不匹配,进而把前置提交里的foo代码也标记为冲突内容。目标提交本身混入了无关变更
检查一下「added bar」提交的实际内容:执行git show <added bar commit id>,看看提交里是不是真的只包含bar相关的修改。如果提交时不小心把「added foo」的代码也加进去了,那cherry-pick时自然会带出这些内容,和main分支的状态冲突。分支历史被修改过
如果somebranch分支做过衍合(git rebase)、提交修正(git commit --amend)这类修改历史的操作,会导致目标提交的父提交状态和main分支差异过大。Git在应用diff时无法正确识别上下文,就会把原本不属于目标提交的代码当成冲突展示出来。
内容的提问来源于stack exchange,提问作者Bersan
相关产品推荐
相关产品推荐

