如何确定Git分支的创build时间?
有没有办法确定Git分支的创build时间? 我在我的回购中有一个分支,我不记得创build它,并认为可能看到创build时间戳会慢跑我的记忆。
使用
git show --summary`git merge-base foo master`
如果你想在上下文中看到它,然后使用
gitk --all --select-commit =`git merge-base foo master`
正如在评论和Jackub的回答中所提到的 ,只要你的分支比configuration设置gc.reflogexpire
(默认是90天)中设置的天数更年轻,那么你可以利用你的reflog来找出当分支引用是第一次创build。
请注意, git reflog
可以占用大部分的git log
标志。 进一步注意HEAD@{0}
风格的select器是有效的时间概念,事实上,它是以datestring的forms处理的(以黑色方式)。 这意味着你可以使用标志--date=local
并得到这样的输出:
$ git reflog --date = local 763008c HEAD @ {Fri Aug 20 10:09:18 2010}:拉:快进 f6cec0a HEAD @ {星期二Aug 10 09:37:55 2010}:拉:快进 e9e70bc HEAD @ {Thu Feb 4 02:51:10 2010}:拉:快进 836f48c HEAD @ {Thu Jan 21 14:08:14 2010}:checkout:从主人到主人 836f48c HEAD @ {Thu Jan 21 14:08:10 2010}:拉:快进 24bc734 HEAD @ {Wed Jan 20 12:05:45 2010}:结帐:从74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a HEAD @ {Wed Jan 20 11:55:43 2010}:checkout:从master到v2.6.31 24bc734 HEAD @ {Wed Jan 20 11:44:42 2010}:拉:快进 964fe08 HEAD @ {Mon Oct 26 15:29:29 2009}:结帐:从4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a HEAD @ {Mon Oct 26 14:52:12 2009}:checkout:从master到v2.6.28
使用--date=relative
也可能有用:
$ git reflog --date = relative 763008c HEAD @ {4 weeks ago}:拉:快进 f6cec0a HEAD @ {6 weeks ago}:pull:快进 e9e70bc HEAD @ {8个月前}:拉:快进 836f48c HEAD @ {8 months ago}:checkout:从主人移到主人 836f48c HEAD @ {8 months ago}:拉:快进 24bc734 HEAD @ {8 months ago}:checkout:从74fca6a42863ffacaf7ba6f1936a9f228950f657移到master 74fca6a HEAD @ {8 months ago}:结账:从主人移动到v2.6.31 24bc734 HEAD @ {8个月前}:拉:快进 964fe08 HEAD @ {11 months ago}:checkout:从4a6908a3a050aacc9c3a2f36b276b46c0629ad91移到master 4a6908a HEAD @ {11 months ago}:checkout:从master移到v2.6.28
最后一个注意:– --all
标志(这实际上是git-reflog理解的git-log标志)将在refs/
(而不是简单的HEAD
)中显示所有已知ref的reflog,这将清楚地显示分支事件:
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
首先,如果你的分支是在gc.reflogexpire
天(默认90天,也就是3个月左右)内创build的,你可以使用git log -g <branch>
或者git reflog show <branch>
来查找reflog中的第一个条目,创build事件,看起来像下面(对于git log -g
):
Reflog: <branch>@{<nn>} (CR Eator <creator@example.com>) Reflog message: branch: Created from <some other branch>
你会得到谁创build了一个分支,之前有多less操作,以及从哪个分支(可能只是“从头创build”,这没有多大帮助)。
MikeSep在回答中这样说 。
其次,如果你有比gc.reflogexpire
更长的分支,而且你运行了git gc
(或者它自动运行),那么你将不得不从它的创build分支中find共同的祖先。 看看configuration文件,也许有branch.<branchname>.merge
条目,它会告诉你这个分支是基于什么。
例如,如果您知道有问题的分支是从主分支(从主分支分支)创build的,则可以使用以下命令查看共同的祖先:
git show $(git merge-base <branch> master)
您也可以尝试git show-branch <branch> master
作为替代。
这是gbacon在回应中所说的 。
Pro Git§3.1 Git分支 – 分支是什么对于git分支究竟是什么有一个很好的解释
Git中的一个分支只是一个轻量级的指向[a]提交的可移动指针。
由于分支只是一个轻量级指针,git没有明确的历史或创builddate的概念。 “但是请继续,”我听到你说,“当然git知道我的分支的历史! 那么,有点。
如果您运行以下任一项:
git log <branch> --not master gitk <branch> --not master
你会看到什么看起来像“你的分支的历史”,但实际上是从“分支”可访问的提交列表,无法从主站访问。 这给了你想要的信息,但是当且仅当你从未将“分支”合并回主,并且从创build它以来从未将主合并到“分支”。 如果你合并了,那么这个差异的历史就会崩溃。
幸运的是,reflog通常包含你想要的信息,正如其他各种答案中所解释的那样。 用这个:
git reflog --date=local <branch>
以显示分支的历史。 这个列表中的最后一个条目(可能)是您创build分支的点。
如果分支已经被删除,那么'分支'不再是一个有效的git标识符,但你可以用它来代替,它可以find你想要的:
git reflog --date=local | grep <branch>
或者在Windows cmd shell中:
git reflog --date=local | find "<branch>"
请注意,reflog不能在远程分支上有效地工作,只有你在本地工作的分支。
我不确定它的git命令,但我想你可以在reflog中find它们。
.git/logs/refs/heads/<yourbranch>
我的文件似乎有一个unix时间戳在他们。
更新:打印日志时似乎有一个选项可以使用reflog历史logging,而不是提交历史logging:
git log -g
你也可以关注这个日志,回到你创build分支的时候。 git log
显示了提交的date,但不是在reflog中进行了操作的date。 除了在上面的path中查找实际的reflog外,我还没有find。
使用:
git reflog
在当前文件夹中显示您的存储库的所有生命周期。 首先出现的分支名称(从下到上)是创build的源。
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
这意味着:
-
分支开发创build(签出-b)从主
-
分支function-jira35从开发中创build(checkout -b)
-
分支function-jira-sut-46从开发中创build(checkout -b)
这是我find这个线程之前想出来的东西。
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 for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'