为何cherry-pick后,master与develop分支PR仍存在代码差异?
出现这种情况主要有以下几个核心原因:
Cherry-pick 生成全新 Commit
Git 的cherry-pick操作不会直接复制原 commit,而是基于当前分支的最新状态,重新创建一个包含相同变更内容的新 commit,这个新 commit 的哈希值和 master 上的 C、D 完全不同。当你对比 master 和 develop 分支时,Git 会检查分支的 commit 历史,而不是单纯对比代码内容——develop 上的这两个新 commit 并没有出现在 master 的历史里,反之亦然,所以 Git 会把这些变更识别为差异。Cherry-pick 过程中存在冲突修改
如果在往 develop 上 cherry-pick C、D 时遇到了代码冲突,你手动解决冲突后的代码可能和原 commit 的内容存在细微差异(比如调整了代码顺序、修改了注释,甚至只是空格换行的变化),这些细节上的不同会被 Git 检测为分支间的代码差异。分支基准线不一致
在你 cherry-pick C、D 之前,develop 分支可能已经有了一些 master 上没有的 commit;或者在 cherry-pick 之后,其中某一个分支(master 或 develop)又新增了其他提交。这会导致两个分支的基准线不同,即使 C、D 的变更已经同步,基准线的差异也会让 Git 在对比时把相关变更显示出来。文件元数据差异
有时候代码内容完全一致,但文件的元数据(比如换行符格式、文件权限、最后修改时间)发生了变化,Git 默认会检测这些元数据的差异,从而在 PR 中显示该文件存在变更。
内容的提问来源于stack exchange,提问作者miro ring

