如何确定何时创建了Git分支?

有没有办法确定< em >, < / em >是Git分支的创建?我在我的repo中有一个分支,我不记得创建了它,我想也许看到创建时间戳会唤醒我的记忆。

383447 次浏览

我还不确定git命令,但我认为您可以在reflogs中找到它们。

.git/logs/refs/heads/<yourbranch>

我的文件中似乎有一个unix时间戳。

在打印日志时,似乎有一个选项可以使用reflog历史而不是提交历史:

git log -g

您还可以跟踪此日志,回溯到创建分支的时候。git log显示的是提交的日期,而不是你在reflog中创建条目的操作的日期。除了在上面的路径中查看实际的reflog之外,我还没有发现。

使用

git show --summary `git merge-base foo master`

If you’d rather see it in context using gitk, then use

gitk --all --select-commit=`git merge-base foo master`

(foo是你要找的分支的名称。)

截图

首先,如果你的分支是在gc.reflogexpire天内创建的(默认为90天,即大约3个月),你可以使用git log -g <branch>git reflog show <branch>在reflog中找到第一个条目,这将是创建事件,看起来如下所示(对于git log -g):

Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>

你会得到谁创建了一个分支,多少操作之前,以及从哪个分支(好吧,它可能只是“created from HEAD”,这没有多大帮助)。

这就是迈克赛普回答说


其次,如果你的分支长于gc.reflogexpire,并且你已经运行了git gc(或者它是自动运行的),你必须找到与创建它的分支的共同祖先。看一下配置文件,也许有branch.<branchname>.merge条目,它会告诉你这个分支是基于哪个分支的。

如果你知道有问题的分支是从主分支创建的(从主分支分叉),例如,你可以使用下面的命令查看共同祖先:

git show $(git merge-base <branch> master)

你也可以尝试git show-branch <branch> master作为替代。

这就是Gbacon在他的回答中说

在评论中指出Jackub的回答中,只要你的分支小于配置设置gc.reflogexpire中设置的天数(默认为90天),那么你就可以使用reflog来找出分支引用第一次创建的时间。

注意git reflog可以接受大部分git log标志。进一步注意,HEAD@{0}样式选择器实际上是时间的概念,实际上是作为日期字符串处理的(以一种hack的方式)。这意味着你可以使用标志--date=local并得到如下输出:

$ git reflog --date=local
763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : Fast-forward
f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : Fast-forward
e9e70bc HEAD@{Thu Feb 4 02:51:10 2010}: pull : Fast forward
836f48c HEAD@{Thu Jan 21 14:08:14 2010}: checkout: moving from master to master
836f48c HEAD@{Thu Jan 21 14:08:10 2010}: pull : Fast forward
24bc734 HEAD@{Wed Jan 20 12:05:45 2010}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657
74fca6a HEAD@{Wed Jan 20 11:55:43 2010}: checkout: moving from master to v2.6.31
24bc734 HEAD@{Wed Jan 20 11:44:42 2010}: pull : Fast forward
964fe08 HEAD@{Mon Oct 26 15:29:29 2009}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91
4a6908a HEAD@{Mon Oct 26 14:52:12 2009}: checkout: moving from master to v2.6.28

有时使用--date=relative也很有用:

$ git reflog --date=relative
763008c HEAD@{4 weeks ago}: pull : Fast-forward
f6cec0a HEAD@{6 weeks ago}: pull : Fast-forward
e9e70bc HEAD@{8 months ago}: pull : Fast forward
836f48c HEAD@{8 months ago}: checkout: moving from master to master
836f48c HEAD@{8 months ago}: pull : Fast forward
24bc734 HEAD@{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master
74fca6a HEAD@{8 months ago}: checkout: moving from master to v2.6.31
24bc734 HEAD@{8 months ago}: pull : Fast forward
964fe08 HEAD@{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master
4a6908a HEAD@{11 months ago}: checkout: moving from master to v2.6.28

最后一点注意:--all标志(实际上是git-reflog所理解的git-log标志)将显示refs/(而不是简单地HEAD)中所有已知引用的reflogs,这将清楚地显示分支事件:

git reflog --date=local --all
860e4e4 refs/heads/master@{Sun Sep 19 23:00:30 2010}: commit: Second.
17695bc refs/heads/example_branch@{Mon Sep 20 00:31:06 2010}: branch: Created from HEAD

这是我在发现这条线索之前想到的。

git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'

Pro Git §3.1 Git分支-什么是分支很好地解释了git分支到底是什么

Git中的分支只是一个轻量级的指向[A]提交的移动指针。

由于分支只是一个轻量级指针,git没有明确的历史或创建日期的概念。“但是等一下,”我听到你说,“git当然知道我的分支历史!”嗯,算是吧。

如果您运行以下任一项:

git log <branch> --not master
gitk <branch> --not master

你会看到看起来像“你的分支的历史记录”,但实际上是一个从“分支”可以到达的提交列表,而从master不能到达。这为你提供了你想要的信息,但当且仅当你从未将'branch'合并回master,并且自创建以来从未将' master '合并到'branch'。如果你合并了,那么这段历史的差异就会崩溃。

幸运的是,reflog通常包含您想要的信息,正如这里的各种其他答案所解释的那样。用这个:

git reflog --date=local <branch>

以显示分支的历史。该列表中的最后一个条目(可能)是您创建分支的点。

如果分支已经被删除,那么'branch'不再是一个有效的git标识符,但你可以使用这个来代替,它可能会找到你想要的:

git reflog --date=local | grep <branch>

或者在Windows cmd shell中:

git reflog --date=local | find "<branch>"

请注意,reflog不能在远程分支上有效工作,只能在您在本地工作过的分支上有效工作。

使用:

git reflog

显示当前文件夹中存储库的所有生命周期。 第一个出现的分支名称(从下到上)是创建的源

855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development
855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development
535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce HEAD@{7}: checkout: moving from development to feature-jira35
855a3ce HEAD@{8}: checkout: moving from master to development

这意味着:

  • 从master创建分支开发(checkout -b)

  • 分支feature-jira35从开发中创建(checkout -b)

  • 分支特性-jira-sut-46从开发中创建(签出-b)

试试这个

  git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'

这个命令显示了分支devmain创建的日期

$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main

结合Andrew Sohn的回答(https://stackoverflow.com/a/14265207/1929406)

branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated

如果您想获得所有分支的详细信息

for i in `git branch -r | tail -n +2 `;do git log --reverse $i|grep -A 2 -B 2 `echo $i | awk -F'origin/' '{print $2}'` |head -n 4; done
我找到了最好的方法: 我总是检查用这种方法创建的最新分支

git for-each-ref --sort=-committerdate refs/heads/

为我做的:(10年后)

git log [--remotes] --no-walk --decorate

由于没有存储关于分支创建时间的信息,因此它所做的是显示每个分支的第一次提交(--no-walk),其中包括提交日期。对于远程分支使用--remotes,对于本地分支省略它。

因为在创建另一个分支之前,我至少要在一个分支中提交一次,这允许我追溯几个月的分支创建(和特性开发启动),以用于文档编制。

来源:AnoE在stackexchange

< p >的语法: Git reflog——date=local | grep checkout: | grep ${current_branch} | tail -1 < /代码> < / p > < p >的例子: Git reflog——date=local | grep checkout: | grep dev-2.19.0 | tail -1 < /代码> < / p > < p >结果: cc7a3a8ec HEAD@{Wed Apr 29 14:58:50 2020}: checkout:从dev-2.18.0移动到dev-2.19.0 < /代码> < / p >

如何通过Github GUI知道

我展示了所有的答案,没有人用UI给出答案。如果有人想看到分支是通过Github UI创建的。

  1. 进入洞察标签。
  2. 在侧栏中选择Network选项卡。
你可以看到分支的创建,如下所示 enter image description here < / p >