如何判断Git远程分支为新创建且未推送过任何提交?
过滤Bitbucket空分支创建触发的Webhook解决方案
优先推荐直接解析Webhook Payload的方案,无需额外执行Git命令,性能和可靠性最高。
方案1:解析Bitbucket推送事件Payload
Bitbucket的repo:push事件Payload中,changes数组的每个元素对应一个分支/标签的变更,通过以下两个逻辑组合即可精准判断是否为无提交的空分支创建:
- 首先判断是否为新分支创建:当
changes[].old.target.hash为全0值0000000000000000000000000000000000000000时,说明本次触发由新分支创建操作导致 - 再判断该分支是否有独有的新提交:执行命令
git branch -a --contains <changes[].new.target.hash>,如果返回结果除了本次新建的分支外,还存在其他已有的远程分支,说明该分支是从已有分支直接切出、没有新增提交,属于需要过滤的场景;如果返回结果仅包含当前新建分支,说明本次推送携带了该分支独有的新提交,需要正常处理。
方案2:统计分支独有提交数
如果需要更严谨的校验,可以通过Git命令统计仅属于当前分支的提交数:
执行命令:git rev-list --count <新分支名> --not --remotes=origin
该命令会自动排除所有已经存在于其他远端分支的提交,仅统计当前分支独有的新提交数量:
- 返回值为0:该分支没有任何独有的新提交,属于刚创建的空分支,直接过滤
- 返回值≥1:本次推送携带了新提交,正常处理即可
注意事项
不要直接使用git rev-list --count <分支名>统计提交数,该命令会统计从根提交到当前分支HEAD的所有提交,从其他分支切出的空分支也会返回和源分支一致的提交数,无法达到区分效果。
内容的提问来源于stack exchange,提问作者Cole Henderson
相关产品推荐
相关产品推荐

