个人仓库相同状态分支发起Git Pull Request会产生什么影响?
问题1:为什么两个分支最终状态完全一致,还会提示发起Pull Request?
GitHub触发Pull Request提示的判断逻辑是分支的提交历史关联关系,而非仅对比分支的最终文件内容。
你使用git merge --squash生成的a1b2c3提交是完全独立的新提交,只有d4e5f6一个父提交,和develop/new-update分支上从c3d4e5到b2c3d4的所有提交没有任何父级关联。此时develop/new-update存在main分支没有的X个提交,main也存在develop/new-update没有的1个squash提交,两个分支处于分叉状态,因此会触发PR提示,即便两者最终文件diff为空。
问题2:创建并合并这个Pull Request会对仓库产生什么影响?会不会让develop分支指针指向main分支的提交?
合并PR的影响
不管你选择GitHub提供的三种PR合并方式中的哪一种,最终都会产生冗余的提交记录,污染main分支的提交历史:
- 选择「普通合并提交」:会生成一个空内容的合并提交,同时将
develop/new-update上的所有历史提交都同步到main分支,相当于在main上新增了一堆内容无变化的重复提交。 - 选择「Squash合并」:会把
develop/new-update的提交再压缩成一个新的空提交合并到main,平白多了一条冗余记录。 - 选择「Rebase合并」:会把
develop/new-update的所有提交变基到a1b2c3之后再合并到main,同样会新增多条内容无变化的冗余提交。
关于develop分支指针
这个PR的合并操作完全不会修改develop/new-update分支的指针。GitHub的PR合并默认只会修改你选定的目标分支(也就是main),源分支develop/new-update会继续停留在原提交b2c3d4,仍然会显示比main多X个提交、落后1个提交。
推荐处理方案
如果不需要继续使用develop/new-update分支,直接删除本地和远程的该分支即可。如果需要保留该分支后续开发,可执行以下操作同步分支状态:
git checkout develop/new-update git reset --hard main # 直接将develop分支指针同步到main的最新提交 git push origin develop/new-update --force # 强制推送更新远程分支
内容的提问来源于stack exchange,提问作者gdcodes
相关产品推荐
相关产品推荐

