以下命令列出了所有本地分支的上次提交哈希和分支名称:
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>我使用的是Windows10,没有特殊的命令环境,只有基本的命令提示符。
发布于 2017-03-07 13:23:00
我能够稍微修改一下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发布于 2017-03-07 16:40:11
没有“分支机构的日期”这样的东西。或者,也许有太多的东西。您将需要选择一个。
具体地说,分支名称只是某个特定提交的名称,该名称具有一些特殊的属性(您可以对该名称进行git checkout以获取“在分支上”,一旦在分支上,您可以使用git commit来进行新的提交并更新name- to -hash-ID条目)。
提交本身确实有日期。更准确地说,它们有两个时间戳,一个用于作者,另一个用于提交者。由于分支名称(如master或develop )命名了一个特定的提交,因此您可以检索这两个提交时间戳中的任何一个,并将其用作日期。但是如果我们将分支标签移动到另一个不同的提交,这个日期将会改变,可能会向后移动。如果两个不同的分支名称指向相同的提交,则这两个分支必须具有相同的提交时间戳。
分支-事实上,几乎所有的Git引用:分支名称、标记名、特殊名称(如stash,甚至HEAD本身)也有reflog,每个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,包括,例如:
ISO%ci:提交日期,类似
8601的格式
对于健壮的脚本,我建议替换:
for branch in `git branch | grep -v HEAD`通过以下方式:
for branch in $(git for-each-ref --format='%(refname:short)' refs/heads)不过(或者类似的东西--例如,更多的工作可以直接在for-each-ref中完成)。
https://stackoverflow.com/questions/42640696
复制相似问题