master分支锁定无法直接提交,通过PR移除提交遇无可比较问题
嘿,我来帮你搞定这个PR的问题~你遇到的这个提示,本质是远程的master分支和commitreversal分支的提交历史完全重合,所以系统认为没有需要合并的内容。大概率是你操作时的分支状态没对齐远程master的最新版本,下面给你一步步的解决方法:
第一步:对齐本地与远程master的最新状态
首先要确保你本地的master分支是完全同步远程锁定的那个master(也就是包含你想要回退的那个提交):
git checkout master git pull origin master
这一步能保证你本地拿到的是远程master的最新代码,避免后续操作基于旧的分支状态。
第二步:重新创建修复分支(或清理旧分支)
建议你重新创建一个新分支来操作,避免旧的commitreversal分支残留的状态干扰:
git checkout -b fix-revert-last-commit
如果你想复用旧分支,先删除远程的旧分支:
git push origin --delete commitreversal
然后再切回本地的commitreversal分支重置。
第三步:执行回退/撤销操作
这里分两种场景,推荐用更安全的revert方式(因为master已锁定,不能改写远程历史):
场景1:推荐用git revert(不改写历史,更合规)
revert会生成一个新的提交来撤销最后一个提交的所有更改,不会改动已有的提交历史,非常适合PR场景:
git revert HEAD
执行后会弹出编辑器让你填写撤销提交的说明,保存退出即可。
场景2:用git reset(仅当你确定要彻底删除最后一个提交,且团队知情)
如果你要彻底移除最后一个提交(比如是误提交的垃圾内容),可以用reset,但注意这会改写分支历史:
git reset --hard HEAD~1
第四步:推送分支并发起PR
把处理好的分支推到远程:
git push origin fix-revert-last-commit
现在再去发起PR,远程master包含待撤销的提交,你的新分支是回退/撤销后的状态,系统就能识别出可比较的内容了。
为什么之前的操作失败?
你之前的操作大概率是本地master已经和远程master不同步(比如你本地悄悄回退过master),导致你切出的commitreversal分支和远程master的提交历史完全一致,所以PR时提示无可比较内容。
内容的提问来源于stack exchange,提问作者Anurag Sharma

