如何获取具有早于给定日期的贡献的分支列表,即包含比我感兴趣的日期更新的提交的所有分支?
以下是一种可能的方法:使用
git for-each-ref
运行。
git log -1 --since=<date> <branch>
对于您的仓库中的每个分支引用。如果此
git log
命令的输出不为空,则相关分支包含比
<date>
更新的提交,您应该在列表中打印该分支的名称;否则,它不包含更新的提交,您不应该打印其名称。
以下是一个shell脚本,它接受一个参数,应该是Git可以识别为日期的字符串(例如
2014/12/25 13:00
,
3.months.ago
,
yesterday
等),并列出所有“绿色分支”(缺乏更好的术语),即包含比指定日期更新的提交的本地分支。
#!/bin/sh
if [ $# -ne 1 ]
then
printf "usage: git greenbranch <date>\n\n"
printf "For more details on the allowed formats for <date>, see the\n"
printf "'git-log' man page.\n"
exit 1
fi
testdate=$1
git for-each-ref --format='%(refname:short)' refs/heads/ \
| while read ref; do
if [ -n "$(git rev-list --max-count=1 --since="$testdate" $ref)" ]
then
printf "%s\n" "$ref"
fi
done
exit $?
这段文字的意思是:脚本可以在GitHub上的
Jubobs/git-aliases获取。
为了方便起见,您可以在用户级别上定义一个Git别名(这里称为
greenbranch.sh
),以运行所需的脚本。
git config --global alias.greenbranch '!sh git-greenbranch.sh'
确保 shell 脚本在您的路径中。
在 Git 项目库的克隆中进行测试
$ git clone https://github.com/git/git/
$ cd git
$ git checkout -b maint origin/maint
$ git checkout -b next origin/next
$ git checkout -b pu origin/pu
$ git checkout -b todo origin/todo
$ git greenbranch "yesterday"
maint
master
next
pu
todo
$ git greenbranch "today"
$
这说明所有五个分支都包含了“昨天”提交的代码,但是没有包含“今天”的提交。