Answers:
采用
git show --summary`git merge-base foo master`
如果您希望使用gitk在上下文中看到它,请使用
gitk --all --select-commit =`git merge-base foo master`
(其中foo是您要查找的分支的名称。)
正如评论和Jackub的答案中指出的那样,只要您的分支比配置设置中设置的天数年轻gc.reflogexpire
(默认为90天),那么您就可以利用您的reflog来查找何时创建分支引用。首先创建。
请注意,git reflog
可以使用大多数git log
标志。还要注意,HEAD@{0}
样式选择器实际上是时间的概念,实际上是作为日期字符串处理的(以一种被砍的方式)。这意味着您可以使用该标志--date=local
并获得如下输出:
$ git reflog --date =本地 763008c HEAD @ {Fri Aug 20 10:09:18 2010}:拉:快进 f6cec0a HEAD @ {2010年8月10日星期二09:37:55}:pull:快进 e9e70bc HEAD @ {Thu Feb 4 02:51:10 2010}:拉:快进 836f48c HEAD @ {2010年1月21日星期四,14:08:14}:结帐:从主人转移到主人 836f48c HEAD @ {Thu Jan 21 14:08:10 2010}:拉动:快进 24bc734 HEAD @ {2010年1月20日星期三12:05:45}:结帐:从74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a HEAD @ {2010年1月20日星期三11:55:43}:结帐:从主服务器移至v2.6.31 24bc734 HEAD @ {2010年1月20日星期三11:44:42}:拉动:快进 964fe08 HEAD @ {2009年10月26日星期一15:29:29}:结帐:从4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a HEAD @ {2009年10月26日星期一14:52:12}:结帐:从主服务器移至v2.6.28
有时也可能有用--date=relative
:
$ git reflog --date =相对 763008c HEAD @ {4周前}:pull:快进 f6cec0a HEAD @ {6周前}:pull:快进 e9e70bc HEAD @ {8个月前}:拉:快进 836f48c HEAD @ {8个月前}:结帐:从一个主人转移到另一个主人 836f48c HEAD @ {8个月前}:拉动:快进 24bc734 HEAD @ {8个月前}:结帐:从74fca6a42863ffacaf7ba6f1936a9f228950f657移至母版 74fca6a HEAD @ {8个月前}:结帐:从主服务器迁移到v2.6.31 24bc734 HEAD @ {8个月前}:拉动:快进 964fe08 HEAD @ {11个月前}:结帐:从4a6908a3a050aacc9c3a2f36b276b46c0629ad91移至母版 4a6908a HEAD @ {11个月前}:结帐:从主服务器移至v2.6.28
最后一点:--all
标志(实际上是git-reflog理解的git-log标志)将显示refs/
(而不是简单地HEAD
)中所有已知引用的引用日志,这将清楚地向您显示分支事件:
git reflog --date =本地--all 860e4e4 refs / heads / master @ {Sun Sep 19 23:00:30 2010}:提交:第二。 17695bc refs / heads / example_branch @ {2010年9月20日星期一00:31:06}:分支:从HEAD创建
gc.reflogexpire
几天之内完成。
Pro Git§3.1 Git分支-什么是分支对git分支的真正含义有很好的解释
Git中的分支只是指向[a]提交的轻量级可移动指针。
由于分支只是轻量级的指针,因此git对其历史或创建日期没有明确的概念。“但是等等,”我听到你说,“ git当然知道我的分支历史!” 好吧,有点。
如果您运行以下任何一项:
git log <branch> --not master
gitk <branch> --not master
您将看到看起来像“分支的历史”的内容,但实际上是“分支”可到达的提交列表,而主分支无法访问这些列表。这将为您提供所需的信息,但前提是且仅当您从未将“分支”合并回母版,并且自创建以来从未将母版合并到“分支”中。如果您已经合并了,那么这个差异会历史崩溃。
幸运的是,刷新日志通常包含您想要的信息,如此处其他各种答案所述。用这个:
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 --date=local <branch>
首先,如果您的分支是在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>
您将了解谁创建了一个分支,之前创建了多少个操作,以及从哪个分支创建了(嗯,它可能只是“从HEAD创建”,这没有多大帮助)。
这就是MikeSep在回答中所说的。
其次,如果分支的存在时间超过了您的分支gc.reflogexpire
并且已经运行git gc
(或它已经自动运行),则必须与创建该分支的分支找到共同的祖先。看一下配置文件,也许有branch.<branchname>.merge
条目,它会告诉您该文件基于哪个分支。
例如,如果您知道所讨论的分支是在master分支之外创建的(从master分支分支),则可以使用以下命令查看公共祖先:
git show $(git merge-base <branch> master)
您也可以尝试git show-branch <branch> master
,作为替代方法。
尝试这个
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
之前(refname)
| cut -c 5- | sort -r |
月,然后用管道输送了grep,这给了我一个按时间顺序排列的列表,或多或少。
--sort='-committerdate'
(按时间顺序排列,请在committerdate之前注意“-”)。
采用:
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
那意味着:
从主创建分支开发(签出-b)
分支功能-jira35从开发中创建(签出-b)
分支功能-jira-sut-46从开发中创建(签出-b)
此命令显示分支的创建日期dev
从main
$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
这为我做到了:(10年后)
git log [--remotes] --no-walk --decorate
由于没有存储有关分支创建时间的信息,因此该操作将显示每个分支的第一次提交(--no-walk
),其中包括提交日期。使用--remotes
远程分支,或省略它的地方分支机构。
由于我在创建另一个分支之前至少在一个分支中进行过一次提交,因此这使我可以追溯几个月的分支创建(和功能dev-start)以用于记录。