bash: unescaped `>` character when switching branches

Ondrej Pohorelsky
2025-06-24T13:00:13Z

Hi,

Our customer has found a possible issue when switching branches.
Output redirection character `>` is not escaped properly when
switching/checking out to different branch.

Steps to reproduce:
1. Create a new branch and switch back to master
```
$ git switch -C 'issue#1234>/tmp/dangerfile'
Switched to a new branch 'issue#1234>/tmp/dangerfile'
$ git switch master
```

2. Try to switch to the created branch with using auto-completion
```
git switch i<TAB>
$ git switch issue#1234>/tmp/dangerfile
fatal: invalid reference: issue#1234
```
3. Verify that the /tmp/dangerfile has been created
```
$ ls /tmp/dangerfile
/tmp/dangerfile
```

Internal interpretation of the created branch:
└── refs
├── heads
│ ├── issue#1234>
│ │ └── tmp
│ │ └── dangerfile

Tested on Fedora 42 with git-2.49.

I've found out that this behavior happens only when using Bash. Zsh
properly escapes the characters when creating and switching to the
branch. Git shouldn't be tricked into creating a file when the user is
switching branches. I'm not entirely sure where the issue lies in the
code, so I'm not attaching any patch fixing this.

--
Ondřej Pohořelský

Software Engineer

Red Hat

opohorel@redhat.com