I use `@` a lot for Git commands in the terminal. I accidentally did something that made me create a branch named `@`. This puzzled me since `HEAD` is not allowed. Note that the bare/one-level `@` ref name is already banned. So this is just about not allowing `refs/heads/@`. § Research This has come up before. There even is a test which guards the current behavior (allow `@` as a branch name) with the comment:[1] ``` # The thing we are testing here is that "@" is the real branch refs/heads/@, # and not refs/heads/HEAD. These tests should not imply that refs/heads/@ is a # sane thing, but it _is_ technically allowed for now. If we disallow it, these # can be switched to test_must_fail. ``` There was no reply to this change in neither the first[2] nor second version. That series points back to a bug report thread[3] which is about expanding `@` to a branch named `HEAD`. Peff found a way for the branch name `HEAD` to be created While figuring out a solution:[4] > Checking "HEAD" afterwards means you can't actually have a branch > named "HEAD". Doing so is probably insane, but we probably really _do_ > want to just disallow the @-conversion here. So that was tangential to the bug fix (`HEAD` as a branch name was not disallowed in the patch series that resulted from this bug). 🔗 1: https://lore.kernel.org/git/20170302082306.n6kfc5uqz2kdxtpm@xxxxxxxxxxxxxxxxxxxxx/ 🔗 2: https://public-inbox.org/git/20170228121514.qajydm5bjdbzsucg@xxxxxxxxxxxxxxxxxxxxx/ 🔗 3: https://public-inbox.org/git/20170228120633.zkwfqms57fk7dkl5@xxxxxxxxxxxxxxxxxxxxx/ 🔗 4: https://public-inbox.org/git/20170227090233.uk7dfruggytgmuw2@xxxxxxxxxxxxxxxxxxxxx/ §2 Disallow `HEAD` as a branch name This was done later in 2017: https://lore.kernel.org/git/20171114114259.8937-1-kaartic.sivaraam@xxxxxxxxx/ §2 `refs/heads/@` is apparently disallowed by git-refs(1) See `t/t1508-at-combinations.sh`: ``` error: refs/heads/@: badRefName: invalid refname format ``` Kristoffer Haugsbakk (3): object-name: fix whitespace object-name: don't allow @ as a branch name t1402: exercise disallowed branch names object-name.c | 5 ++--- t/t1402-check-ref-format.sh | 4 ++++ t/t3204-branch-name-interpretation.sh | 9 ++------- 3 files changed, 8 insertions(+), 10 deletions(-) -- 2.46.1.641.g54e7913fcb6