您如何获得每个分支的提交者列表,这些提交者至少比master提交了x次

  • 本文关键字:提交 master 列表 何获得 分支 git
  • 更新时间 :
  • 英文 :


有几个远程存储库有很多分支。在web UI方面,很多都落后了20多个提交。这些分支很可能被提交者抛弃,我想通知这些提交者删除这些分支。

我已经看到了在一个分支或另一个分支上获取提交的代码片段,但我对分支列表和该分支的最新提交者感兴趣,因为该分支比master落后20次提交(不管他们有多少次提交)。

是否有git命令我可以链接在一起得到这个信息?

这里有一个小的bash脚本,它告诉您分支的"年龄"(从上次提交到该分支的时间),以及负责的提交者:

#!/bin/env bash
remote=${1:-/refs/heads}
for branch in $(git for-each-ref --format='%(refname)') ; do
    if [[ ${branch} =~ ${remote}/(.*) ]] ; then
        short_branch_name=${BASH_REMATCH[1]}
        latest_commit=$(git log -1 --format="%at [%ar] %cn" ${branch})
        echo ${latest_commit} ${short_branch_name}
    fi
done | sort | cut -c 12-

使用refs/remotes调用它可以查看所有分支,而不必关心您在本地实际签出的内容。以下是git repo本身的一些示例输出。

$ ~/Desktop/branch-ages.bash refs/remotes
[7 days ago] Junio C Hamano origin/maint
[25 hours ago] Junio C Hamano origin/HEAD
[25 hours ago] Junio C Hamano origin/master
[23 hours ago] Junio C Hamano origin/next
[23 hours ago] Junio C Hamano origin/pu
[22 hours ago] Junio C Hamano origin/todo

添加和删除格式参数。

Wolf的解决方案基于日期,而不是提交的#。如果你真的想要#的提交数,那么一个配方可以找到尚未合并到分支中的分支,对于列出的每个分支,找到合并基数,然后计算从master到合并基数的提交数,并检查该值是否>= 20,如果是,从该分支的最后一次提交中提取作者的姓名/电子邮件。

  for branch in $(git branch --no-merge); do
    mergeBase=$(git merge-base $branch HEAD)
    numCommitsBack=$(git rev-list --count HEAD ^$mergeBase)
    if [ $numCommitsBack -ge 20 ]; then
       lastBranchAuthorEmail=$(git log -1 --format="%ae" $branch)
       lastBranchAuthorName=$(git log -1 --format="%an" $branch)
       echo $lastBranchAuthorName, $lastBranchAuthorEmail, branch $branch is $numCommitsBack commits behind HEAD
    fi 
   done

最新更新