Git不逐个回退中间提交将master回退到历史提交时PR无变更如何处理
问题原因
你创建的BranchCommitB分支的所有提交均已存在于master分支的历史记录中,Git默认的拉取请求变更检测逻辑为仅校验源分支相对于目标分支的新增提交对应的文件改动,因此会判定为无变更需要合并,和实际两个分支的文件内容存在差异的现象并不冲突。
解决方案
根据是否需要保留master分支上CommitB之后的提交历史,可以选择以下三种方案:
方案1:使用git revert批量生成反向提交(推荐,适用于多人协作的公共分支)
该方案不会删除master已有提交记录,不会影响其他开发者的本地分支同步:
- 切换到本地
master分支并拉取最新代码
git checkout master git pull origin master
- 批量生成CommitB之后所有提交的反向提交,最终代码状态和CommitB完全一致
git revert --no-edit CommitB..HEAD
- 推送改动到远程:如果仓库没有PR合并限制,可直接推送到
master;如果有PR校验要求,新建分支推送后提PR即可,此时PR可正常识别所有回退变更
# 直接推送到master的命令 git push origin master
方案2:强制重置master到CommitB(仅适用于个人仓库/确认无需保留中间提交的场景)
该方案会彻底擦除CommitB到LatestCommit的所有提交记录,操作前务必确认:
- 切换到本地
master分支,硬重置到CommitB
git checkout master git reset --hard CommitB
- 强制推送到远程仓库,若仓库开启了
master分支保护,需要临时关闭强制推送限制后再操作
git push -f origin master
方案3:基于已有的BranchCommitB分支生成可识别的PR
如果你不想修改本地master分支,要沿用已经创建的BranchCommitB分支提PR,只需要给分支新增一个提交触发差异检测即可:
- 切换到本地
BranchCommitB分支
git checkout BranchCommitB
- 生成一个空提交触发变更校验
git commit --allow-empty -m "chore: trigger PR diff detection"
- 推送分支到远程,重新创建PR,此时Azure DevOps可正常识别两个分支的文件差异
内容的提问来源于stack exchange,提问作者Tarta
相关产品推荐
相关产品推荐

