Git分支因回退操作显示落后master实际应超前如何解决
问题原因
你遇到的分支状态异常,根源是GitHub网页端的回滚操作本质是生成一个反向抵消的revert提交追加在master分支历史上。Git做合并比对时会把这部分新生成的提交记录判定为master独有更新,才会显示develop分支落后提交;直接用默认合并/变基逻辑时,Git会把master上revert后的旧内容(也就是README里保留的Sourceforge表述)当成更新的变更,直接覆盖develop上已经改对的GitHub相关内容。
解决方案
直接使用Git的ours合并策略即可实现你要的仅对齐提交历史、完全保留develop分支现有文件内容的效果,不需要手动逐个处理16个提交的冲突:
- 先同步本地仓库的远端分支状态,切到本地
develop分支拉取最新代码:
git fetch origin git checkout develop git pull origin develop
- 执行策略合并:该命令会把
master的提交历史合并到当前develop分支,但全程保留develop上的所有文件内容,不会引入任何master分支的文件变更,正好匹配你要的合并效果:git merge -s ours master - 将合并后的结果推送到远端
develop分支:git push origin develop
注意不要和
-X ours参数搞混:-X ours是默认递归合并策略下的冲突处理规则,遇到非冲突的master变更还是会自动合入;只有-s ours是全局采用当前分支内容的合并策略,才能完全避免master上的旧文档内容冲掉develop的正确修改。
操作完成后GitHub上的分支落后提示会直接消失,后续按照原有工作流从develop往master提发布PR时,diff内容会完全符合预期,不会出现内容被意外回退的问题。
内容的提问来源于stack exchange,提问作者Gushi
相关产品推荐
相关产品推荐

