# `git remote set-branches (without --add) <name> <branch>…​` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist

5 messages from 2024-09-03 to 2024-09-10. Participants: Han Jiang, Phillip Wood.
Thread: https://gitlist.dev/t/62043

## Han Jiang, 2024-09-03 10:37

Subject: `git remote set-branches (without --add) <name> <branch>…​` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist
Message-ID: <CANrWfmR1y64OP+506JUO3Beic9kn5_TrhMQ1ZucVcDEn03noLg@mail.gmail.com>
URL: https://gitlist.dev/e/CANrWfmR1y64OP%2B506JUO3Beic9kn5_TrhMQ1ZucVcDEn03noLg%40mail.gmail.com

```
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)

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

```

## Phillip Wood, 2024-09-05 09:07

Subject: Re: `git remote set-branches (without --add) <name> <branch>… ` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist
Message-ID: <612756e2-fc84-4d49-9f74-ff1998f66f7c@gmail.com>
URL: https://gitlist.dev/e/612756e2-fc84-4d49-9f74-ff1998f66f7c%40gmail.com
In-Reply-To: <CANrWfmR1y64OP+506JUO3Beic9kn5_TrhMQ1ZucVcDEn03noLg@mail.gmail.com>

```
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@example.com
$ 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
> 

```

## Han Jiang, 2024-09-05 22:24

Subject: Re: `git remote set-branches (without --add) <name> <branch>… ` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist
Message-ID: <CANrWfmS9PCKyK3X0rFnWfecrn-ETmcdtoPtA6j9QS7nTwfivKg@mail.gmail.com>
URL: https://gitlist.dev/e/CANrWfmS9PCKyK3X0rFnWfecrn-ETmcdtoPtA6j9QS7nTwfivKg%40mail.gmail.com
In-Reply-To: <612756e2-fc84-4d49-9f74-ff1998f66f7c@gmail.com>

```
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@example.com
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@gmail.com> 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@example.com
> $ 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
> >

```

## Phillip Wood, 2024-09-09 09:13

Subject: Re: `git remote set-branches (without --add) <name> <branch>… ` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist
Message-ID: <20fc64ed-24a1-45c0-928f-ddb4c6106262@gmail.com>
URL: https://gitlist.dev/e/20fc64ed-24a1-45c0-928f-ddb4c6106262%40gmail.com
In-Reply-To: <CANrWfmS9PCKyK3X0rFnWfecrn-ETmcdtoPtA6j9QS7nTwfivKg@mail.gmail.com>

```
On 05/09/2024 23:24, Han Jiang wrote:
> 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.

Oh, I wonder if that is a feature or a bug? I see we don't sanity check 
the branch name either so we'll happily create refspecs containing any 
old rubbish. I'll send a patch series that fixes the original bug and 
checks the branch names later this week.

Best Wishes

Phillip

> 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@example.com
> 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@gmail.com> 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@example.com
>> $ 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
>>>

```

## Han Jiang, 2024-09-10 11:01

Subject: Re: `git remote set-branches (without --add) <name> <branch>… ` does not add refspecs to `remote.<remote>.fetch` when `remote.<remote>.fetch` does not exist
Message-ID: <CANrWfmS4EHQU9pHH9t1kk6hq9E=W6uqi48CAvYgNnzSY-wkVTg@mail.gmail.com>
URL: https://gitlist.dev/e/CANrWfmS4EHQU9pHH9t1kk6hq9E%3DW6uqi48CAvYgNnzSY-wkVTg%40mail.gmail.com
In-Reply-To: <20fc64ed-24a1-45c0-928f-ddb4c6106262@gmail.com>

```
It's good to hear that the bug could get a fix! Looking forward to it!
The documentation does not say the expected behavior of that, so it's
under-specified whether it's a feature or a bug.

On Mon, Sep 9, 2024 at 9:13 PM Phillip Wood <phillip.wood123@gmail.com> wrote:
>
> On 05/09/2024 23:24, Han Jiang wrote:
> > 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.
>
> Oh, I wonder if that is a feature or a bug? I see we don't sanity check
> the branch name either so we'll happily create refspecs containing any
> old rubbish. I'll send a patch series that fixes the original bug and
> checks the branch names later this week.
>
> Best Wishes
>
> Phillip
>
> > 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@example.com
> > 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@gmail.com> 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@example.com
> >> $ 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
> >>>

```
