git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: determine name of tag used for checkout when multiple tags exist?

From
John Keeping <john@keeping.me.uk>
Date
Sep 4, 2015, 07:54 UTC
Message-ID
<20150904075400.GA27660@serenity.lan>
In-Reply-To
<CAL3By-8odLE53iBiNATgiCcnK4Ef5uBeH7E6EMB1K7P-oX0oAQ@mail.gmail.com>
On Thu, Sep 03, 2015 at 08:53:16PM -0600, Jesse Hopkins wrote:
Show 24 quoted lines
> Looking for suggestions on how to determine the tag that was used to
> checkout a git repo to its associated commit, particularly in the case
> where multiple tags might point to the same commit.
> 
> I've had a look at git-name-rev and git-describe, and both seem useful so
> long as there's only one tag pointing to the commit of interest.  However,
> I'm still coming up to speed on their behavior in the multiple tag case
> (mainly by experimentation).
> 
> It seems to me that when checking out to a tag, Git does not record the
> *name* of the tag anywhere, but rather sets HEAD to the de-referenced
> commit SHA-1.  As far as I can tell, it is not possible to recover the
> original name of the tag in the case of multiple tags on the same commit.
> Is my conclusion correct?
> 
> The reason I ask is that we have a build environment where it is likely
> that multiple tags will get set by various groups in our main 'truth' Git
> repo.  We are using some scripting that would like to know the *name* of
> the tag used for checkout (this has been working well for us so far as long
> as we checkout against branches).
> 
> Is there perhaps some other means of doing a checkout to tag that DOES
> record the name of the tag?  If not, I imagine we might need some external
> means to record the checked out tag, which is not out of the question.
Have you considered looking in the reflog?
When I checkout a tag, "git reflog -1" gives something like:
	989d251 HEAD@{0}: checkout: moving from master to v0.9.2
Since whitespace isn't permitted in tag names you can do something like:
	tag=$(git reflog -1)
	tag=${tag##* }
	git cat-file tag "$tag" >/dev/null 2>&1 || echo "not a tag!"
Previous: Jacob KellerNext: John Keeping
Message 3 of 5 in “determine name of tag used for checkout when multiple tags exist?”
  1. Jesse HopkinsSep 4, 2015
  2. Jacob KellerSep 4, 2015
  3. John KeepingSep 4, 2015
  4. John KeepingSep 4, 2015
  5. Jesse HopkinsSep 5, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.