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

如何确定何时创建Git分支?,git,branch,git-branch,Git,Branch,Git Branch,是否有方法确定何时创建Git分支?我的回购协议中有一个分支,我不记得创建了它,我想看到创建时间戳可能会唤起我的记忆 我还不确定它的git命令,但我认为您可以在reflogs中找到它们 .git/logs/refs/heads/<yourbranch> 您也可以遵循此日志,返回到创建分支时git log显示的是提交日期,而不是在reflog中创建条目的操作的日期。除了查看上面路径中的实际reflog之外,我还没有找到它。使用 git show --summary `git merge

是否有方法确定何时创建Git分支?我的回购协议中有一个分支,我不记得创建了它,我想看到创建时间戳可能会唤起我的记忆

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

.git/logs/refs/heads/<yourbranch>
您也可以遵循此日志,返回到创建分支时
git log
显示的是提交日期,而不是在reflog中创建条目的操作的日期。除了查看上面路径中的实际reflog之外,我还没有找到它。

使用

git show --summary `git merge-base foo master` git show--摘要`git合并基本foo主机` 如果您希望使用gitk在上下文中查看它,那么使用

gitk --all --select-commit=`git merge-base foo master` gitk--all--select commit=`git merge base foo master` (其中foo是您要查找的分支机构的名称。)


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

您也可以尝试使用git show branch master,作为替代方法

这就是。

在中,只要您的分支小于配置设置中设置的天数
gc.reflogexpire
(默认值为90天),那么您就可以利用reflog来确定分支引用是何时首次创建的

请注意,可以使用大多数标志。进一步注意,
HEAD@{0}
样式选择器实际上是时间的概念,并且实际上是作为日期字符串处理的(以一种黑客攻击的方式)。这意味着您可以使用标志
--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 最后一点注意:
--all
标志(这实际上是git reflog理解的git日志标志)将显示
refs/
中所有已知ref的reflog(而不是简单的
HEAD
),它将清楚地显示分支事件:

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--date=local--all 860e4e4参考文献/heads/master@{Sun Sep 19 23:00:30 2010}:提交:第二。 17695bc参考文献/heads/example_branch@{2010年9月20日星期一00:31:06}:branch:从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:'
对git分支的真正含义有很好的解释

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

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

如果运行以下任一操作:

git log <branch> --not master
gitk <branch> --not master
git日志--不是主日志
吉特,不是大师
您将看到看起来像“分支的历史记录”的内容,但实际上是一个可以从“分支”访问但无法从主节点访问的提交列表。这将为您提供所需的信息,但前提是您从未将“branch”合并回master,并且自创建以来从未将master合并到“branch”中。如果你已经合并,那么这种差异的历史将崩溃

幸运的是,reflog通常包含您想要的信息,正如这里的各种其他答案所解释的。使用以下命令:

git reflog --date=local <branch>
git reflog--date=local
以显示分支的历史。此列表中的最后一个条目(可能)是创建分支的点

如果分支已被删除,则“branch”不再是有效的git标识符,但您可以使用它,它可能会找到您想要的:

git reflog --date=local | grep <branch>
git reflog--date=local | grep
或在Windows cmd shell中:

git reflog--date=local | find“”
请注意,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)

  • 分支特征-jira35是从开发中创建的(签出-b)

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

试试这个

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

此命令显示分支
dev
from
main

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

结合孙家富的回答()


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

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年后)

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

由于在创建另一个分支之前,我在一个分支中至少进行了一次提交,因此为了便于文档编制,我可以追溯几个月的分支创建(以及功能开发启动)

在stackexchange上

语法:

git reflog--date=local | grep checkout:| grep${current_branch}| tail-1

例如:

git reflog--date=local | grep checkout:| grep dev-2.19.0 | tail-1

结果:

cc7a3a8ec负责人{Wed Apr 29 14:58:50 2020}:签出:从dev-2.18.0移动到dev-2.19.0

我显示了所有答案,但没有人用UI给出答案。如果有人想知道何时通过Github UI创建分支

  • 转到“洞察”选项卡
  • 选择侧栏中的“网络”选项卡
  • 您可以看到如下所示的分支创建

    为了澄清答案,该过程分为两个步骤。(1) 使用“git merge base master”获取treesh,其中branch是感兴趣的分支。(2) 使用treesh作为git show的输入,以获取日期:“git show--summary”这个ans
      git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
    
    $git reflog show --date=iso dev
    $7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
    
    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/
    
    git log [--remotes] --no-walk --decorate