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

Re: [PATCH v2 2/2] Teach @{-1} to git merge

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 15, 2009, 02:05 UTC
Message-ID
<7vfxigqwsp.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<alpine.DEB.1.00.0902142332210.10279@pacific.mpi-cbg.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> - update-ref does _not_ interpret @{-<n>} as the branch name (which I 
>   find okay, as update-ref is plumbing), but instead creates the file 
>   '.git/@{-<n>}' (which I think is a bug).

I do not think it make any sense for update-ref to expand @{-1} to the name of the last branch, as you end up creating a not-a-ref ".git/next" and not ".git/refs/heads/next". It might be Ok to say that @{-1} expands to refs/heads followed by the name of the last branch only for this plumbing command, but such an inconsistency feels very wrong.

The particular plumbing command, following the example of recent loosening the rule back to "HEAD is allowed to point outside refs/heads/", should be allowed to create anything that passes check_ref_format(), and perhaps bit more because we would need to allow ".git/HEAD".

> Now, show-branch indeed does not substitute the branch _name_, but 
> otherwise it works correctly, no?
> otherwise it works correctly, no?  And given the fact that show-branch 
> does not substitute "HEAD" with the current branch name, either,...

The tip commits come from get_sha1(), so obviously it would "work", but it does not show what branch it talks about. HEAD is shown only when the user says HEAD (e.g. "git show-branch master HEAD") so I do not see much similarity there.

The advertised new feature is that you can use the @{-1} syntax anywhere you would use a branch name and it would work as if you typed the name of the branch, so in that sense show-branch that shows @{-1} and does not show the name of the branch is a bug.

It is the same thing for "git-merge @{-1}". Sure, it would record a correct tree in the resulting commit, but without the fix it would say "Merge branch @{-1}" which is wrong and needs to be fixed.

And no, "update-ref @{-1}" should not create ".git/next" when you were on 'next' the last time. When you say "update-ref next", you may have typed the four characters and that may look the same as the name of a branch, but obviously the argument to the command does not *mean* the name of a branch, so it falls outside the "anywhere you would use a branch name" rule.

Previous: Johannes SchindelinNext: Junio C Hamano
Message 7 of 21 in “teach the new "@{-1} syntax to "git branch"”
  1. teach the new "@{-1} syntax to "git branch"Junio C Hamano, Feb 14, 2009
  2. Jay SoffianFeb 14, 2009
  3. Junio C HamanoFeb 14, 2009
  4. 1/2 Teach the "@{-1} syntax to "git branch"Junio C Hamano, Feb 14, 2009
  5. 2/2 Teach @{-1} to git mergeJunio C Hamano, Feb 14, 2009
  6. Johannes SchindelinFeb 14, 2009
  7. Junio C HamanoFeb 15, 2009
  8. Junio C HamanoFeb 15, 2009
  9. Nanako ShiraishiFeb 15, 2009
  10. Junio C HamanoFeb 15, 2009
  11. Johannes SchindelinFeb 15, 2009
  12. Junio C HamanoFeb 16, 2009
  13. Johannes SchindelinFeb 16, 2009
  14. Jay SoffianFeb 16, 2009
  15. Junio C HamanoFeb 26, 2009
  16. Johannes SchindelinFeb 26, 2009
  17. Deskin MillerFeb 27, 2009
  18. Junio C HamanoFeb 27, 2009
  19. git-branch: a detached HEAD and branch called HEAD are differentJunio C Hamano, Feb 27, 2009
  20. "git branch -M @{-1}"Junio C Hamano, Feb 27, 2009
  21. Junio C HamanoFeb 27, 2009

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.