如何列出包含比特定日期更新的提交的所有分支?
How can I list all branches that contain commits newer than a specific date?
当使用 git log
时,我可以提供 --since=<date>
来限制日志提交晚于特定日期。
有了git branch -r
,我得到了所有的远程分支。
我如何获得贡献早于给定日期的分支列表,即包含比我感兴趣的日期更新的提交的所有分支?
或者,如果这很难或不可能,只考虑分支机构提示的日期可能就足够了。
您可以使用
在 some-branch
上显示最近一次提交的日期
git log -1 --format=format:%cd some-branch
这个日期也可以用不同的格式打印,请参阅 git log
手册页上的 --date
选项。
How would I get the list of branches that have contributions that are younger than a given date, i.e. all branches that contain commits newer than the date I'm interested in?
这是一种可能的方法:使用 git for-each-ref
到 运行
git log -1 --since=<date> <branch>
对于您的存储库中的每个分支引用。如果这个 git log
命令的输出是非空的,那么有问题的分支包含比 <date>
更新的提交,你应该在你的列表中打印分支的名称;否则,它不会,你不应该打印它的名字。
这里是一个shell脚本,它接受一个参数,它应该是一个Git可以识别为日期的字符串(例如2014/12/25 13:00
、3.months.ago
、 yesterday
等),并列出所有 "green branches"(因为缺少更好的术语),即包含比指定日期更新的提交的本地分支。
#!/bin/sh
# git-greenbranch.sh
#
# List the local branches that contain commits newer than a specific date
#
# Usage: git greenbranch <date>
#
# To make a Git alias called 'greenbranch' out of this script,
# put the latter on your search path, and run
#
# git config --global alias.greenbranch '!sh git-greenbranch.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=
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-project repo
的克隆中进行测试
$ git clone https://github.com/git/git/
# go grab a cup o' coffee...
$ cd git
# check all remote branches out (for testing purposes)
$ 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"
$
这表明所有五个分支都包含 "yesterday" 的提交,但是 none 包含 "today".
的提交
--simplify-by-decoration
仅列出具有直接引用的提交:
git log --oneline --decorate --branches --remotes --since=$date \
--simplify-by-decoration
从那里开始,这只是一个格式问题。
当使用 git log
时,我可以提供 --since=<date>
来限制日志提交晚于特定日期。
有了git branch -r
,我得到了所有的远程分支。
我如何获得贡献早于给定日期的分支列表,即包含比我感兴趣的日期更新的提交的所有分支?
或者,如果这很难或不可能,只考虑分支机构提示的日期可能就足够了。
您可以使用
在some-branch
上显示最近一次提交的日期
git log -1 --format=format:%cd some-branch
这个日期也可以用不同的格式打印,请参阅 git log
手册页上的 --date
选项。
How would I get the list of branches that have contributions that are younger than a given date, i.e. all branches that contain commits newer than the date I'm interested in?
这是一种可能的方法:使用 git for-each-ref
到 运行
git log -1 --since=<date> <branch>
对于您的存储库中的每个分支引用。如果这个 git log
命令的输出是非空的,那么有问题的分支包含比 <date>
更新的提交,你应该在你的列表中打印分支的名称;否则,它不会,你不应该打印它的名字。
这里是一个shell脚本,它接受一个参数,它应该是一个Git可以识别为日期的字符串(例如2014/12/25 13:00
、3.months.ago
、 yesterday
等),并列出所有 "green branches"(因为缺少更好的术语),即包含比指定日期更新的提交的本地分支。
#!/bin/sh
# git-greenbranch.sh
#
# List the local branches that contain commits newer than a specific date
#
# Usage: git greenbranch <date>
#
# To make a Git alias called 'greenbranch' out of this script,
# put the latter on your search path, and run
#
# git config --global alias.greenbranch '!sh git-greenbranch.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=
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-project repo
的克隆中进行测试$ git clone https://github.com/git/git/
# go grab a cup o' coffee...
$ cd git
# check all remote branches out (for testing purposes)
$ 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"
$
这表明所有五个分支都包含 "yesterday" 的提交,但是 none 包含 "today".
的提交--simplify-by-decoration
仅列出具有直接引用的提交:
git log --oneline --decorate --branches --remotes --since=$date \
--simplify-by-decoration
从那里开始,这只是一个格式问题。