A way to get into the state is `git remote set-branches <remote>` (followed by zero <branch>es), which removes `remote.server.fetch` configuration variable. After that, `git remote set-branches <remote> <branch>…` does not work. (But `git remote set-branches --add` can be used to get out of the corrupted state.) Shortened version of the example: git remote add server git@xxxxxxxxxxx git config list --local git remote set-branches server git config list --local git remote set-branches server branch1 branch2 git config list --local On Thu, Sep 5, 2024 at 9:07 PM Phillip Wood <phillip.wood123@xxxxxxxxx> wrote: > > On 03/09/2024 11:37, Han Jiang wrote: > > Thank you for filling out a Git bug report! > > Please answer the following questions to help us understand your issue. > > > > What did you do before the bug happened? (Steps to reproduce your issue) > > It is always helpful to show how to reproduce a bug but please try and > aim for a minimal reproduction recipe. It is much easier to follow if > you show which output lines come from which command. In this case one > can reproduce the issue with > > $ git remote add test git@xxxxxxxxxxx > $ git config --get-all remote.test.fetch > +refs/heads/*:refs/remotes/test/* > $ git config --unset-all remote.test.fetch > $ git config --get-all remote.test.fetch > $ git remote set-branches test main topic > $ git config --get-all remote.test.fetch > > I haven't looked into what causes this. I wonder how likely users are to > be affected - how did you get into a state where there was no fetch > refspec set for your remote? > > Best Wishes > > Phillip > > > cd '/'; cd '/'; rm --force --recursive -- './test_git'; mkdir "$_"; cd "$_"; > > mkdir --parents -- './server' './client'; > > git -C './client' init './repo' > > git -C './client/repo' remote --verbose > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote add server 'file://'"$(realpath > > './server/repo.git')" > > git -C './client/repo' remote --verbose > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches server branch1 branch2 > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches --add server branch3 branch4 > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches --add server branch3 branch4 > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches server > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches server branch1 branch2 > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches --add server branch3 branch4 > > git -C './client/repo' config list --local --show-scope --show-origin > > git -C './client/repo' remote set-branches --add server branch3 branch4 > > git -C './client/repo' config list --local --show-scope --show-origin > > > > What did you expect to happen? (Expected behavior) > > > > (local config has branch1 and branch2:) > > remote.server.fetch=+refs/heads/branch1:refs/remotes/server/branch1 > > remote.server.fetch=+refs/heads/branch2:refs/remotes/server/branch2 > > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3 > > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4 > > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3 > > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4 > > > > What happened instead? (Actual behavior) > > > > (local config does not have branch1 and branch2:) > > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3 > > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4 > > remote.server.fetch=+refs/heads/branch3:refs/remotes/server/branch3 > > remote.server.fetch=+refs/heads/branch4:refs/remotes/server/branch4 > > > > What's different between what you expected and what actually happened? > > > > Anything else you want to add: > > > > Please review the rest of the bug report below. > > You can delete any lines you don't wish to share. > > > > > > [System Info] > > git version: > > git version 2.46.0.windows.1 > > cpu: x86_64 > > built from commit: 2e6a859ffc0471f60f79c1256f766042b0d5d17d > > sizeof-long: 4 > > sizeof-size_t: 8 > > shell-path: D:/git-sdk-64-build-installers/usr/bin/sh > > feature: fsmonitor--daemon > > libcurl: 8.9.0 > > OpenSSL: OpenSSL 3.2.2 4 Jun 2024 > > zlib: 1.3.1 > > uname: Windows 10.0 22631 > > compiler info: gnuc: 14.1 > > libc info: no libc information available > > $SHELL (typically, interactive shell): C:\Program Files\Git\usr\bin\bash.exe > > > > > > [Enabled Hooks] > > not run from a git repository - no hooks to show > >