如何找到git分支的创建时间
按照git的官方说法,git的分支就没有创建时间这个概念;因为git分支不同于cvs/svn的分支,只是一个时间戳。
有些时候我们确实需要查找分支的创建时间,因为需要确认哪些commit提交到哪些branch了,还剩哪些需要commit:
这个办法
- 前提条件
已知分支是从哪一个根分支创建出来的
- TARGETBRANCH: 待查创建时间的分支
- BASEBRANCH: 是TARGETBRANCH的根分支,即TARGETBRANCH是从BASEBRANCH创建出来的。
- 办法就是
- 检索出BASEBRANCH上的所有提交commit
- 验证这些commit是否在TARGETBRANCH上
- 找到最后一个在TARGETBRANCH出现的提交
- 那么之后两个分支就分开了,也就是这个提交之后,在下一个提交之前的某个时间点。
shell代码:
#!/bin/bash
git log origin/<BASEBRANCH> | grep "^commit" | while read X COMMIT; do
echo $COMMIT
git show ${COMMIT} | grep "^Date:"
git branch -r --contains ${COMMIT}
done
举例来说,上述脚本运行如下输出:
...
16897db9996182873ba0d169331c34f6dde03123
Date: Thu Mar 7 18:28:52 2019 +0800
origin/<BASEBRANCH>
origin/release-1.1
origin/release-2.1
32242fc7cb09dbcc363d803f149b36f5f3da48d7
Date: Tue Mar 5 01:58:06 2019 -0800
origin/<TARGETBRANCH>
origin/<BASEBRANCH>
origin/release-1.1
origin/release-2.1
...
说明:
- 提交16897db9996182873ba0d169331c34f6dde03123没有在目标分支TARGETBRANCH中出现,说明此时提交到根分支BASEBRANCH的代码已经不同步出现在TARGETBRANCH分支了,此时TARGETBRANCH肯定已经创建了。
- 而提交32242fc7cb09dbcc363d803f149b36f5f3da48d7在两个分支都出现,说明他们还没有分开。
- 由此推断,目标分支TARGETBRANCH的创建时间应该在这两个提交之间,即Tue Mar 5 01:58:06 2019 -0800到Thu Mar 7 18:28:52 2019 +0800之间。
这个办法能在大多数场景下使用,但是特殊情况除外,因为git本身不支持,这只能算是一种绕弯的办法。