以下命令列出了我所有本地分支的最后一个提交哈希和分支名称:
git show-ref --heads
输出:
<hash> <branch-1>
<hash> <branch-2>
...
<hash> <branch-n>
但是,我想查看每个分支的日期。以下命令仅显示当前分支上的日期和哈希值,但不显示最后一次提交的分支名称:
git log -1 --format="%ci %H"
输出:
<date> <hash>
如何获得两者结合的结果?
<date> <hash> <branch-1>
<date> <hash> <branch-2>
...
<date> <hash> <branch-n>
我使用的是Windows 10,没有花哨的命令环境,只是基本的命令提示符。
答案 0 :(得分:4)
我能够稍微调整this great GitHub post以获得以下内容:
$ for branch in `git branch | grep -v HEAD`;do echo -e
`git show --format="%ci %cr %H" $branch | head -n 1` \\t$branch; done | sort -r
<强>输出:强>
2017-03-07 11:38:38 +0800 2 hours ago 87ed1306a1c06576043cd398097a1dc0ec456632 branch1
2017-03-07 02:50:06 +0000 3 hours ago 577fe106a9eb5763cbfd5bce87cfa9448ef52ca8 master
2017-03-07 02:50:06 +0000 3 hours ago 577fe106a9eb5763cbfd5bce87cfa9448ef52ca8 branch2
2017-03-03 17:07:05 +0800 4 days ago 419a23b246ad932c9659b70fded4b1362e92d884 branch3
答案 1 :(得分:0)
没有“分支日期”这样的东西。或者,也许有太多的东西。你需要选择一个。
具体来说,分支名称只是某个特定提交的名称,名称具有一些特殊属性(您可以git checkout
在分支上获取该名称,并且一旦在分支上,您就可以git commit
进行新的提交并更新名称到哈希ID的条目。
提交自己做有日期。更准确地说,它们有两个时间戳,一个用于作者,一个用于提交者。由于分支 name (如master
或develop
命名一个特定提交,因此您可以检索这些提交时间戳中的任何一个并将其用作日期。但是如果我们将分支标签移动到另一个不同的提交,这个日期将会改变,也许会倒退。如果两个不同的分支名称指向相同的提交,则两者都必须具有相同的提交时间戳。
分支 - 实际上,几乎所有 Git引用:分支名称,标记名称,特殊名称(如stash
,甚至HEAD
本身 - 也有 reflogs ,每个reflog条目记录更改引用的时间和原因:
8dbdf33 HEAD@{11}: reset: moving to HEAD^
70ac787 HEAD@{12}: cherry-pick: change default python path for FreeBSD
8dbdf33 HEAD@{13}: checkout: moving from diff-merge-base to stash-exp
也是:
8dbdf33 HEAD@{6 weeks ago}: reset: moving to HEAD^
70ac787 HEAD@{6 weeks ago}: cherry-pick: change default python path for FreeBSD
8dbdf33 HEAD@{6 weeks ago}: checkout: moving from diff-merge-base to stash-exp
这些reflog条目最终会过期,通常在30到90天之后(取决于reflog条目所指定的提交或其他对象是否可从参考的当前值到达),但直到然后,一些reflog条目或条目可能有资格作为“分支日期”。
Tim Biegeleisen's answer从每个分支名称指向的提交中获取提交者时间戳。 The git log
documentation, under the PRETTY FORMATS section,包括,例如:
%ci :提交者日期,类似ISO 8601的格式
对于健壮的脚本,我建议替换:
for branch in `git branch | grep -v HEAD`
使用:
for branch in $(git for-each-ref --format='%(refname:short)' refs/heads)
虽然(或类似的东西 - 例如,可以直接在for-each-ref
中完成更多工作。)