是否有一种方法可以确定Git分支是何时创建的?我在我的repo中有一个分支,我不记得创建了它,我想也许看到创建时间戳会唤醒我的记忆。


当前回答

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

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:'

其他回答

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

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

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

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

git log -g

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

试试这个

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

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不能在远程分支上有效工作,只能在您在本地工作过的分支上有效工作。

Use

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

如果您更愿意使用gitk在上下文中查看它,那么使用

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

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

首先,如果你的分支是在gc中创建的。Reflogexpire days(默认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。如果你已经运行了git gc(或者它是自动运行的),你必须找到与创建它的分支的共同祖先。看一下配置文件,可能有分支。归并项,它会告诉你这个是基于哪个分支的。

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

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

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

这就是格培根在他的回答中所说的。