According to https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html a '/' is character to use in a branch name.
git imposes the following rules on how references are named: 1. They can include slash / for hierarchical (directory) grouping, but no slash-separated component can begin with a dot . or end with the sequence .lock. git-flow, for example, uses it extensively to prefix branches with 'release/', 'bugfix/', 'hotfix/' etc. However, I just ran into the following problem $git init Initialized empty Git repository in /home/keith/play/bug2/.git/ $touch a $git add a $git commit -m "C1" [master (root-commit) d569d5b] C1 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a $git checkout -b hotfix Switched to a new branch 'hotfix' $git checkout -b hotfix/b2 error: unable to resolve reference refs/heads/hotfix/b2: Not a directory fatal: Failed to lock ref for update: Not a directory $ The problem arises when a branch already exists with a name matching the stem of the new branch name. As far as I can see, this comes from the use of the branch name to create a directory under .git/refs/heads with the name 'hotfix/b2' because .git/refs/heads/hotfix already exists as a plain file. Note, however that this works $git init Initialized empty Git repository in /home/keith/play/bug3/.git/ $touch a $git add a && git commit -m 'C1' [master (root-commit) 304052c] C1 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a $git checkout -b hotfix/b1 Switched to a new branch 'hotfix/b1' $git checkout -b hotfix/b2 Switched to a new branch 'hotfix/b2' $ls .git/refs/heads/ -R .git/refs/heads/: hotfix master .git/refs/heads/hotfix: b1 b2 $ But, for the reverse reason, I can't now create the branch named 'hotfix' I can see the value in grouping branches in a directory tree under refs/heads, but wouldn't it make more sense to simply escape the '/' in the branch name so that 'hotfix/b1' is stored on disk as 'hotfix\/b1'? I found this when trying to document a branching workflow for support branches. The repositories already had branches such as 'release1', 'release2' and I wanted to add branches such as 'release1/develop', 'release2/develop', 'release1/staging', 'release2/staging' etc. Renaming the existing published branches is not an option for us, I'm afraid. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html