GitHub发起PR提示Nothing to Compare 提交历史不匹配如何解决
PR页面提示Nothing to Compare,本质是你的个人fork仓库和目标主仓库没有共同的提交祖先节点:你本地用Spring Initializr生成的初始化项目自带独立的Git提交记录,和主仓库最开始只存LICENSE、README的初始提交完全没关联,Git找不到两个分支的对比基线,自然没法生成PR的差异内容。
你想的关联主仓库地址、把主仓库初始文件纳入本地构造共同提交节点的思路完全可行,按下面步骤操作即可解决:
操作前先给本地当前开发分支打备份,避免误操作丢失代码:git branch dev-backup
关联主仓库为上游远程源
你可以直接在本地项目终端执行命令,也可以在NetBeans 12.4中右键项目,依次选择「Git > 远程 > 添加远程源」完成配置:git remote add upstream <主仓库的Git克隆地址>
配置完成后拉取主仓库的全量提交历史:git fetch upstream合并两个独立仓库的提交历史
推荐使用变基方案,能完整保留你所有的开发提交记录:注意将命令里的
main替换为主仓库实际的默认分支名(部分老仓库默认分支为master)git rebase --allow-unrelated-histories upstream/main
执行过程中如果触发README、LICENSE文件冲突,优先保留主仓库的对应文件版本,你本地的自定义项目说明可以后续在主仓库文件基础上追加修改。冲突解决后执行以下命令继续变基流程:git add <冲突文件路径>git rebase --continue如果你不需要调整提交顺序,也可以选择直接合并无关历史:
git pull upstream main --allow-unrelated-histories
同样处理完文件冲突后提交合并结果即可。推送重构后的分支到个人fork仓库
因为提交树基线被调整,需要强制推送到你的个人远程仓库:git push --force origin <当前开发分支名>
推送完成后刷新PR创建页面,即可正常识别代码差异,完成PR提交。
- 后续参与项目开发时,fork主仓库后要直接克隆个人fork仓库的地址到本地,再基于克隆下来的仓库目录开展开发工作,不要在独立初始化的、自带Git历史的项目里直接关联远程仓库,避免再次出现无共同祖先的问题。
- 日常开发建议定期拉取上游主仓库的最新代码合并到本地分支,减少后续PR的冲突概率。
内容的提问来源于stack exchange,提问作者David Ogbodu

