GitHub拉取请求中重复出现旧提交(不同ID)问题求助
解决PR中出现旧提交的问题
嘿,我遇到过一模一样的问题!这大概率是因为你创建新分支的时候,没在已经同步好远程的master分支上操作——要么是重置master前就建了分支,要么是重置后没切回同步后的master再开新分支,导致你的分支里带上了远程已经有的那个ddca57d...提交,Git自然会把它当成你分支的独有提交显示在PR里。
下面分两种场景给你解决方案:
场景1:你的新分支还没推送到远程
这种情况最简单,直接重新基于最新master建分支就行:
- 先切回同步好的master:
git checkout master - 再拉一下确保完全同步(保险起见):
git pull origin master - 删除旧的问题分支(比如你的分支叫
readme-update):git branch -D readme-update - 基于最新master重新建分支:
git checkout -b readme-update - 把你之前的有效提交(
08cc673...)挑到新分支上:git cherry-pick 08cc67393f4e121ae06b3cbd08e1bf01db490ddc- 如果碰到冲突,手动解决后执行
git cherry-pick --continue就行
- 如果碰到冲突,手动解决后执行
- 最后推送到远程开PR:
git push origin readme-update
场景2:新分支已经推送到远程(且团队允许强制推送)
如果已经推上去了,就用变基把旧提交删掉:
- 切到你的功能分支:
git checkout readme-update - 执行交互式变基:
git rebase -i master- 这时候会弹出编辑器,里面列着你分支相对于master的所有提交。找到那个旧的
ddca57d...提交,把它前面的pick改成drop,保存退出 - 要是有冲突,解决后执行
git rebase --continue
- 这时候会弹出编辑器,里面列着你分支相对于master的所有提交。找到那个旧的
- 安全地强制推送到远程:
git push origin readme-update --force-with-lease- 用
--force-with-lease比直接--force靠谱,能避免不小心覆盖别人的提交
- 用
- 刷新PR页面,你会发现旧提交已经消失了,只剩你自己的
Preparing readme提交
小提醒
下次创建新分支前,一定要先确认当前所在的分支是已经和远程完全同步的主分支(比如master/main),这样能从根源避免这类问题。如果团队不允许强制推送,也可以直接按场景1的方法新建分支、挑提交,然后开新PR,把旧PR关掉就行。
内容的提问来源于stack exchange,提问作者anquegi
相关产品推荐
相关产品推荐

