比方说我有
master
已合并到g1
,而分支g1
已合并到master
。
git merge master -m "#3 git merge master to g1"
git merge g1 -m "#3 git merge g1 to master"
...
...
git branch -r -v
>
origin/g1 8b535b9 #3 git merge master to g1
origin/master a335421 A comment
origin/newbranch 626a6d2 branch example
有什么方法可以看到创建分支的顺序,分支开始时的时间戳或SHA? 或者以某种方式找到哪一个分支起源于另一个分支? 除了我知道主人是我最老的事实。
答案 0 :(得分:4)
如果您对您创建了分支(在本地存储库中)感兴趣,并且不久前(不到90天)创建了相关分支以前使用默认设置),您可以在 reflog 中查看创建事件。
$ head -1 .git/logs/refs/heads/<branch_name>
000000... 4a28f1... J Hacker <joe@example.com> \
1400885439 +0200 branch: Created from HEAD
这里缩短了SHA-1标识符以提高可读性,并显示该行已损坏 - 在实际输出中它是一条长行。
此处的时间是UNIX时间戳(自纪元以来的秒数)加上数字时区。您可以使用date
将其转换为人类可读输出,例如:
$ date --date=@1400885439 --rfc-2822
Sat, 24 May 2014 00:50:39 +0200
$ TZ=GMT-2 date --date=@1400885439 --rfc-2822
Sat, 24 May 2014 00:50:39 +0200
不幸的是,从git版本2.2.1开始,reflog日期没有漂亮的格式。下面是所有与reflog相关的漂亮格式:
- &#39;%gD&#39;:reflog选择器,例如
refs/stash@{1}
- &#39;%gd&#39;:缩短了reflog选择器,例如
stash@{1}
- &#39;%gn&#39;:reflog identity name
- &#39;%gN&#39;:reflog身份名称(尊重.mailmap,见
- &#39;%ge&#39;:reflog identity email
- &#39;%gE&#39;:reflog身份电子邮件(尊重.mailmap,见
- &#39;%gs&#39;:reflog subject
如果您对其他人创建分支感兴趣,情况会更加困难。
首先,您只能找到分支分支的提交及其提交日期;该分支可以在以后创建。正如@Jubobs在评论中所写,除了reflog(严格来说是本地的)之外,Git并没有记录分支机构创建的日期。
其次,您还需要知道有问题的分支被分叉的分支(或一组分支);如果分支foo
在分支A
的分支bar
分叉,并且分支bar
从分支A
分叉,则存储库看起来完全相同{1}}(本地reflog信息除外)。
假设有问题的分支是从一个集成分支分叉的主题分支:foo
,maint
或master
,我们可以使用next
来查找共同的祖先,然后git merge-base --all
以适当的格式查找提交日期,如下面的Mykola Gurov answer所示。例如:
git show
答案 1 :(得分:1)
你可以尝试找到第一次提交分支偏离master的日期,虽然我不确定它有多可靠。一些事情:
git branch | { while read branch; do merge_base=$(git merge-base --all $branch master); date_branched=$(git show -s --format=format:%ci $merge_base); echo "$branch: $merge_base @ $date_branched"; done }