Re: [PATCH] revisions: add @{default} shorthand for default branch
- From
Harald Nordgren <haraldnordgren@gmail.com>
- Date
- Jan 30, 2026, 10:59 UTC
- Message-ID
- <20260130105954.59636-1-haraldnordgren@gmail.com>
- In-Reply-To
- <xmqq1pj8b22h.fsf@gitster.g>
Thanks for your comments!
Show 10 quoted lines
> But @{upstream} and @{push} are inherently very different from what
> you are adding, aren't they? Asking for topic1@{upstream} and
> topic2@{upstream} makes quite a lot of sense, because the meaning of
> @{upstream} depends on "which branch's upstream are you talking
> about???". But I suspect that asking for topic1@{default} and
> expect it would be different from topic2@{default} is nonsense, as
> "the default" is not per branch but is an attribute of a repository.
> In other words, <branch>@{default} may by itself be a nonsense
> query. Are you rejecting a non-empty <branch> that may appear
> before @{default} as an error?I will update the code to treat 'new-branch@{default}' as nonsense, it's not a case I thought about, and would never use 😅
> After cloning an upstream project, those who dislike the local > branch name 'master' often rename it to something else, like > > $ git branch -m master main
I have never heard about anyone doing that. Isn't it more expected that people keep whatever branch is on the remote? But regardless, I hope there is a way to still make @{default} map to whatever your renamed your default branch to.
Show 7 quoted lines
> Given > that the names of local branches are under control of the local end > user and not upstream projects, I would imagine that the primary > branch used by a user is of per-user nature, not per repository. In > other words, instead of having to do "git branch -m" after cloning, > you may do "git config --global init.defaultBranch" just once and > keep using the same default name.
My ratio on cloning other people's repo vs. create new repos is likely 999/1, so I'm given the default names that maintainer chose. I have default branches called 'master', 'main' and 'develop'.
Yes it's possible to rename, but what this feature does is open up the convenience of not having to bother with that.
I have this script that I run many times a day. However it doesn't work when remote is not called 'origin', so I have another version for 'upstream', etc:
git checkout $(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')
That's uneccessary overhead, that could now be replaced with:
git checkout @{default}Harald