You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何检测未通过Pull Request直接提交至Master分支的Commit?

检测直接提交到Master分支的Commit

嘿,这个需求我太熟了!之前维护团队项目时,为了确保所有变更都走PR流程,经常要抓这种跳过PR直接推的“漏网之鱼”,给你几个简单好用的方法:

方法1:用GitHub CLI(最准确,适合GitHub项目)

如果你的项目托管在GitHub上,用官方的gh CLI工具可以直接精准定位:

  1. 先导出所有通过合并PR进入master的提交哈希:
    gh pr list --state merged --json commits | jq -r '.[].commits[].oid' > pr-commits.txt
    
  2. 导出master分支上的所有提交哈希:
    git log master --pretty=format:"%H" > all-master-commits.txt
    
  3. 对比两个文件,找出只在master但不在PR提交列表里的记录:
    comm -23 all-master-commits.txt pr-commits.txt
    
    输出的哈希就是像c4这样直接提交到master的违规提交。

方法2:本地Git命令(无需平台CLI,依赖提交规范)

如果你的团队约定所有PR合并的提交(包括 squash 合并)都会在提交信息里带上PR编号(比如fix: 修复登录bug (#123),那用一条Git命令就能搞定:

git log master --no-merges --grep="\(#\d\+\)" --invert-grep

这条命令会过滤掉:

  • 合并提交(--no-merges
  • 提交信息里包含#数字格式PR编号的提交
    剩下的就是直接提交到master、没走PR流程的提交。

方法3:基于分支拓扑的本地检测

如果你的PR都是从feature/develop分支合并到master,且这些分支还没被删除,可以用这条命令找出所有不在任何feature/develop分支上的master提交:

git log master --not --remotes=origin/feature/* --not --remotes=origin/develop

不过这个方法的局限性是如果旧的feature分支已经被删除,就会漏检。


内容的提问来源于stack exchange,提问作者islegmar

火山引擎 最新活动