You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找未通过Pull Request直接推送到master分支的提交?

我来帮你搞定这个问题!要找出所有没通过Pull Request直接推送到master的提交,分两种场景操作最靠谱:一种是用本地Git命令排查,另一种是利用仓库托管平台的内置功能来查找。

方法一:使用Git命令本地排查

这种方法适合你能直接克隆仓库到本地的情况,灵活度很高:

  • 首先确保本地master分支是最新状态:
    git checkout master && git pull origin master
    
  • 如果你仓库的PR合并都是保留合并提交的(比如GitHub默认的合并方式),可以用这条命令过滤掉所有PR合并的提交,剩下的就是直接推送的:
    git log --no-merges --grep="Merge pull request" --invert-grep
    
    原理是:PR合并的提交通常会带有Merge pull request #XXX from user/feature-branch这样的提交信息,我们用--invert-grep反向匹配,就能排除这些合并记录。
  • 如果你们习惯用squash或rebase方式合并PR(没有单独的合并提交),那可以结合仓库保护规则的生效日期来筛选。假设你是2023年1月1日开启的禁止直接推送规则,就用:
    git log --no-merges --after="2023-01-01" master
    
    这条命令会列出该日期之后master分支上所有非合并的提交,这些大概率就是直接推送的(因为规则生效后应该只有PR合并的提交能进来)。
方法二:利用托管平台内置功能(以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:26:46