From: Junio C Hamano Date: Sat, 18 Mar 2006 06:37:46 GMT Subject: Re: How to find a revision's branch name Message-ID: <7vfylgz29x.fsf@assigned-by-dhcp.cox.net> In-Reply-To: Marco Costalba writes: > Is it possible to get branch name from a revision sha? > Something like > > $ git branch b14e2494b8a70737066f4ade4df1b5559e81b44b > todo That is in general impossible. $ git show-branch master~1 next pu ! [master~1] blame: Nicer output ! [next] Merge branch 'jc/cvsimport' into next ! [pu] Merge branch 'jc/cvsimport' into next --- -- [next] Merge branch 'jc/cvsimport' into next ++ [next^2] cvsimport: honor -i and non -i upon subsequent imports -- [next^] Merge branch 'jc/fetch' into next ++ [next^^2] fetch: exit non-zero when fast-forward check fails. -- [next~2] Merge branch 'ew/abbrev' into next ++ [next~2^2] ls-files: add --abbrev[=] option ++ [next~2^2^] ls-tree: add --abbrev[=] option ++ [next^2^] blame: Fix git-blame +++ [master~1] blame: Nicer output $ git rev-parse --verify master~1 88a8b7955666ed8fa5924fadbb3bb58984eaa6af Now what should this command say? $ git branch --tell 88a8b7955666ed8fa5924fadbb3bb58984eaa6af It is not head of any branch. Should it say master~1? next^2~1? pu^2~1? The closest thing is name-rev, which tries to give you the simplest. It may or may not match what you want: $ git name-rev 88a8b7955666ed8fa5924fadbb3bb58984eaa6af 88a8b7955666ed8fa5924fadbb3bb58984eaa6af master~1 $ git name-rev `git rev-parse --verify b14e24` b14e2494b8a70737066f4ade4df1b5559e81b44b todo~16 However. > I need this to correctly annotate files not in HEAD > tree. Currently qgit runs git-rev-list --header --topo-order > --parents --remove-empty HEAD -- > > to get a file history. But this fails if is not found > in HEAD. The right command to run in our case should be: > git-rev-list --header --topo-order --parents --remove-empty > todo -- ... I wonder why you care. Wouldn't this work just as well? $ git rev-list --header --topo-order --parents --remove-empty \ --all -- It lists 70 commits at the moment.