分支领先于另一分支的含义?为何main分支会领先dev分支?
以下是几种可能的情况,你可以逐一排查:
CI/CD流水线自动提交代码到main
很多CI/CD流程在触发后会自动执行一些操作,比如更新版本号、生成自动文档、修改配置文件,然后直接把这些变更提交到main分支。这类自动提交通常会带有流水线相关的标识(比如提交者是github-actions[bot]),你可以通过git log main查看提交历史,确认是否存在这类记录。合并时使用了非快进合并,且未同步回dev
如果合并dev到main时用了git merge --no-ff(禁止快进合并),main会生成一个全新的合并提交,但这个提交不会自动同步到dev分支。时间久了,main就会比dev多这个合并提交。你可以用git log --oneline main ^dev查看main独有的提交,看是否是这类合并记录。误操作导致的额外提交
哪怕你们约定不直接在main开发,也可能出现误操作:比如有人不小心把其他分支的提交cherry-pick到了main,或者用git push --force强制推送了本地修改到main。检查这些独有的提交的作者、提交信息,能帮你确认是否是这类情况。合并后未同步main的更新到dev
每周合并dev到main后,如果main产生了新的提交(比如流水线自动提交),但没有把这些变更同步回dev,dev就会逐渐落后。你可以尝试拉取最新的main分支,合并到dev后推送到远程,看看是否能让两个分支对齐。远程仓库的自动钩子或第三方工具操作
部分远程仓库平台的内置钩子,或者关联的第三方工具(比如代码自动修复工具),可能会在main分支上自动提交变更。这类操作也会让main出现dev没有的提交记录。
内容的提问来源于stack exchange,提问作者Millhorn

