如何查找未通过Pull Request直接推送到master分支的提交?
我来帮你搞定这个问题!要找出所有没通过Pull Request直接推送到master的提交,分两种场景操作最靠谱:一种是用本地Git命令排查,另一种是利用仓库托管平台的内置功能来查找。
方法一:使用Git命令本地排查
这种方法适合你能直接克隆仓库到本地的情况,灵活度很高:
- 首先确保本地master分支是最新状态:
git checkout master && git pull origin master - 如果你仓库的PR合并都是保留合并提交的(比如GitHub默认的合并方式),可以用这条命令过滤掉所有PR合并的提交,剩下的就是直接推送的:
原理是:PR合并的提交通常会带有git log --no-merges --grep="Merge pull request" --invert-grepMerge pull request #XXX from user/feature-branch这样的提交信息,我们用--invert-grep反向匹配,就能排除这些合并记录。 - 如果你们习惯用squash或rebase方式合并PR(没有单独的合并提交),那可以结合仓库保护规则的生效日期来筛选。假设你是2023年1月1日开启的禁止直接推送规则,就用:
这条命令会列出该日期之后master分支上所有非合并的提交,这些大概率就是直接推送的(因为规则生效后应该只有PR合并的提交能进来)。git log --no-merges --after="2023-01-01" master
方法二:利用托管平台内置功能(以GitHub/GitLab为例)
如果不想折腾本地命令,直接用平台自带的工具更直观:
GitHub 操作步骤
- 进入仓库后,点击顶部的「Insights」选项卡
- 左侧菜单选择「Network」,这里能看到所有提交的分支来源:直接推送到master的提交会显示为从master分支发起,而PR合并的提交会关联到对应的feature分支
- 还可以用仓库内的搜索功能:在页面顶部的搜索框输入
is:commit base:master -is:pr,就能列出master分支上所有不属于任何PR的提交
GitLab 操作步骤
- 进入仓库后,点击左侧「Repository」->「Commits」
- 在提交列表的搜索框输入
no merge request,或者查看每一条提交的「Merge Request」列,为空的就是没有通过PR合并、直接推送到master的提交
额外注意点
- 如果之前有成员用
git push --force强制推送过master分支,这类提交也会被包含在结果里,需要单独核对 - 对于squash合并的PR,提交的作者信息可能和PR发起者一致,但可以通过查看提交的原始分支(在平台的提交详情页能看到)来区分是否是直接推送的
内容的提问来源于stack exchange,提问作者pkalinow
相关产品推荐
相关产品推荐

