了解git分支是何时创建的(不是对该分支的第一次提交)

了解git分支是何时创建的(不是对该分支的第一次提交),git,git-branch,Git,Git Branch,我如何知道git分支是何时创建的 我不想知道第一次向该分支提交是什么时候。 我想知道那个分支是什么时候创建的 这是一个重现工作示例的脚本: #! /bin/bash set -x set -e mkdir test cd test git init echo "hello" >readme git add readme git commit -m "initial import" date sleep 5 git checkout -b br1 date

我如何知道git分支是何时创建的

我不想知道第一次向该分支提交是什么时候。 我想知道那个分支是什么时候创建的

这是一个重现工作示例的脚本:

#! /bin/bash
set -x
set -e

mkdir test
cd test
git init
echo "hello" >readme
git add readme
git commit -m "initial import"
date

sleep 5
git checkout -b br1
date                   # this is the date that I want to find out.

sleep 5
echo "hello_br1" >readme
git commit -a -m "hello_br1"
date

echo "hello_br1_b" >readme
git commit -a -m "hello_br1_b"

git checkout master
echo "hello_master" >readme
git commit -a -m "hello_master"

git branch -a; 
git log --all --graph --abbrev-commit --decorate --pretty=format:"%h - %an, %ad : %s" --date=iso
执行此命令:

./test.sh 
++ set -e
++ mkdir test
++ cd test
++ git init
Initialized empty Git repository in /test_git/test2/.git/
++ echo hello
++ git add readme
++ git commit -m 'initial import'
[master (root-commit) 9b95944] initial import
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme
++ date
Fri Aug 16 17:51:24 CEST 2013
++ sleep 5
++ git checkout -b br1
Switched to a new branch 'br1'
++ date
Fri Aug 16 17:51:29 CEST 2013
++ sleep 5
++ echo hello_br1
++ git commit -a -m hello_br1
[br1 6c559cd] hello_br1
 1 files changed, 1 insertions(+), 1 deletions(-)
++ date
Fri Aug 16 17:51:34 CEST 2013
++ echo hello_br1_b
++ git commit -a -m hello_br1_b
[br1 5f0d8ab] hello_br1_b
 1 files changed, 1 insertions(+), 1 deletions(-)
++ git checkout master
Switched to branch 'master'
++ echo hello_master
++ git commit -a -m hello_master
[master 2ed092d] hello_master
 1 files changed, 1 insertions(+), 1 deletions(-)
++ git branch -a
  br1
* master
++ git log --all --graph --abbrev-commit --decorate '--pretty=format:%h - %an, %ad : %s' --date=iso
* 5f0d8ab - David Portabella, 2013-08-16 17:51:34 +0200 : hello_br1_b
* 6c559cd - David Portabella, 2013-08-16 17:51:34 +0200 : hello_br1
| * 2ed092d - David Portabella, 2013-08-16 17:51:34 +0200 : hello_master
|/  
* 9b95944 - David Portabella, 2013-08-16 17:51:24 +0200 : initial import
因此,使用git log或git reflog,我可以找到初始导入的日期(17:51:24)和第一次提交到分支br1的日期(17:51:34)

但是我需要知道br1分支是什么时候创建的(17:51:29)

怎么做


(还有一个问题:它有散列吗?如何知道是谁创建了那个分支)

你既不能知道是谁创建了一个分支,也不能知道它是什么时候创建的——至少不能用Git本身

因为Git不跟踪分支元数据。它根本不关心谁创建了一个分支(您通常从远程获得很多分支),因为分支只是指向提交的指针(ref)


因此,分支也没有分支——事实上,Git ref只是
.Git
文件夹中的一个纯文本文件,其中包含它引用的对象的散列(或者,在符号ref的情况下,它引用的其他ref的名称)。

对不起,但是Git没有保留创建分支的正式跟踪信息(存储库之间存储和共享的不是数据)。分支只是对提交的引用,仅此而已。这也意味着没有id或对象可以指向此数据

reflog确实跟踪分支的更改时间,但它只是一个有限的历史记录,随着时间的推移而过期。它确实记录了一些信息。例如,
git branch bar
导致reflog中出现以下条目:

:: git reflog show --date=iso bar
7d9b83d bar@{2013-08-16 12:23:28 -0400}: branch: Created from master
我在使用git checkout-b bar时也看到了类似的条目:

:: git co -b bar
Switched to a new branch 'bar'
:: git reflog show --date=iso bar
d6970ef bar@{2013-08-16 12:30:50 -0400}: branch: Created from HEAD

因此,根据您的用例,以及您需要挖掘的距离,
git reflog
实际上可能对您有用。

另请参见(1)、(2)和(3)。此命令的可能副本确实显示了我需要的信息(至少是日期),谢谢。遗憾的是,它没有正式、永久地存储此信息。为什么它不会这样做?为什么有人会认为知道谁创建了分支以及何时创建分支并不重要?总之,您知道一个对远程存储库执行相同操作的窍门吗?(当我想找出谁在远程存储库中创建了一个分支时,这个技巧不起作用)不幸的是,我认为我们在远程repo上没有相同的技巧。reflog是repo的本地功能。在远程端,您可能会看到创建到的分支,但作为推送的一部分,它会有那个时间戳(不是作者创建它时的那个)。至于为什么Git没有跟踪它,最近Git邮件列表上有一个关于它的讨论,所以我不会重复它。我将挖掘一个链接,稍后发布到这里(我必须马上运行)简短的形式:他们不认为保持足够的价值。GIT-ReFuff-Deave:Deal= ISO分支名称对于那些感兴趣的人来说是有用的,我有一个脚本试图找到分支点:你需要知道它从哪里分支,但是它做了一个相当不错的工作来定位你分支的提交。,Git在这里并不完美,因为它不跟踪数据。:-)