首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取所有分支的日期、哈希和分支名称

获取所有分支的日期、哈希和分支名称
EN

Stack Overflow用户
提问于 2017-03-07 13:12:38
回答 2查看 355关注 0票数 4

以下命令列出了所有本地分支的上次提交哈希和分支名称:

代码语言:javascript
复制
git show-ref --heads

输出:

代码语言:javascript
复制
<hash> <branch-1>
<hash> <branch-2>
...
<hash> <branch-n>

但是,我也希望看到每个分支的日期。以下命令仅在当前分支上显示上次提交的日期和哈希,而不显示分支名称:

代码语言:javascript
复制
git log -1 --format="%ci %H"

输出:

代码语言:javascript
复制
<date> <hash>

我怎样才能得到两者结合的结果呢?

代码语言:javascript
复制
<date> <hash> <branch-1>
<date> <hash> <branch-2>
...
<date> <hash> <branch-n>

我使用的是Windows10,没有特殊的命令环境,只有基本的命令提示符。

EN

回答 2

Stack Overflow用户

发布于 2017-03-07 13:23:00

我能够稍微修改一下this great GitHub post,以获得以下内容:

代码语言:javascript
复制
$ 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

输出:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2017-03-07 16:40:11

没有“分支机构的日期”这样的东西。或者,也许有太多的东西。您将需要选择一个。

具体地说,分支名称只是某个特定提交的名称,该名称具有一些特殊的属性(您可以对该名称进行git checkout以获取“在分支上”,一旦在分支上,您可以使用git commit来进行新的提交并更新name- to -hash-ID条目)。

提交本身确实有日期。更准确地说,它们有两个时间戳,一个用于作者,另一个用于提交者。由于分支名称(如masterdevelop )命名了一个特定的提交,因此您可以检索这两个提交时间戳中的任何一个,并将其用作日期。但是如果我们将分支标签移动到另一个不同的提交,这个日期将会改变,可能会向后移动。如果两个不同的分支名称指向相同的提交,则这两个分支必须具有相同的提交时间戳。

分支-事实上,几乎所有的Git引用:分支名称、标记名、特殊名称(如stash,甚至HEAD本身)也有reflog,每个reflog条目都记录了什么时候以及为什么某些东西改变了引用:

代码语言:javascript
复制
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

这也是:

代码语言:javascript
复制
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的格式

对于健壮的脚本,我建议替换:

代码语言:javascript
复制
for branch in `git branch | grep -v HEAD`

通过以下方式:

代码语言:javascript
复制
for branch in $(git for-each-ref --format='%(refname:short)' refs/heads)

不过(或者类似的东西--例如,更多的工作可以直接在for-each-ref中完成)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42640696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档