有几个远程存储库有很多分支。在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