Is there a way to determine when a git branch was created? I have a branch in my repo & and I don't remember creating it... thought maybe seeing the creation timestamp will jog my memory.
$ git show --summary `git merge-base branch master`
If you'd rather see it in context, then use
$ gitk --all --select-commit=`git merge-base branch master`
First, if you branch was created within gc.reflogexpire
days (default 90 days, i.e. around 3 months), you can use git log -g <branch>
or git reflog show <branch>
to find first entry in reflog, which would be creation event, and looks something like below (for git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <[email protected]>)
Reflog message: branch: Created from <some other branch>
You would get who created a branch, how many operations ago, and from which branch (well, it might be just "Created from HEAD", which doesn't help much).
That is what MikeSep said in his answer.
Second, if you have branch for longer than gc.reflogexpire
and you have run git gc
(or it was run automatically), you would have to find common ancestor with the branch it was created from. Take a look at config file, perhaps there is branch.<branchname>.merge
entry, which would tell you what branch this one is based on.
If you know that the branch in question was created off master branch (forking from master branch), for example, you can use the following command to see common ancestor:
git show $(git merge-base <branch> master)
You can also try git show-branch <branch> master
, as an alternative.
This is what gbacon said in his response.
Note that git-reflog can take most git-log flags. Further note that the HEAD@{0}
style selectors are effectively notions of time and, in fact, are handled (in a hacked sort of way) as date strings. This means that you can use the flag --date=local
and get output like this:
$ 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
It may also be useful at times to use --date=relative
:
$ git reflog --date=relative 763008c HEAD@{4 weeks ago}: pull : Fast-forward f6cec0a HEAD@{6 weeks ago}: pull : Fast-forward e9e70bc HEAD@{8 months ago}: pull : Fast forward 836f48c HEAD@{8 months ago}: checkout: moving from master to master 836f48c HEAD@{8 months ago}: pull : Fast forward 24bc734 HEAD@{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master 74fca6a HEAD@{8 months ago}: checkout: moving from master to v2.6.31 24bc734 HEAD@{8 months ago}: pull : Fast forward 964fe08 HEAD@{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master 4a6908a HEAD@{11 months ago}: checkout: moving from master to v2.6.28
One last note: the --all
flag (which is really a git-log flag understood by git-reflog) will show the reflogs for all known refs in refs/
(instead of simply, HEAD
) which will show you branch events clearly:
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