@Junio C Hamano Thank you for the explanation! As you said, "refmap only specifies the where the stuff is stored locally" (what to fetch is specified by last command line arguments), but the issue with this report is a bit complicated because it's about whether "only refmap specifies the where the stuff is stored locally". After I search "empty value" or "empty string" in https://git-scm.com/docs/git-config , the most intuitive behavior of `git fetch --refmap` (for me) is: `git fetch <remote> <branch>...` uses `remote.<remote>.fetch`; `git fetch --refmap=<refspec> --refmap=<refspec> <remote> <branch>...` uses `remote.<remote>.fetch` and all the `--refmap=<refspec>`s; `git fetch --refmap='' --refmap=<refspec> --refmap=<refspec> <remote> <branch>...` uses all the `--refmap=<refspec>`s; I'll post an example of all of these being used at the same time to both of you. On Thu, Sep 5, 2024 at 2:34 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Han Jiang <jhcarl0814@xxxxxxxxx> writes: > > > What happened instead? (Actual behavior) > > > > In `git fetch --refmap='+refs/heads/branch1:refs/remotes/server/branch1' > > server branch1 branch2`, > > `remote.server.fetch=+refs/heads/*:refs/remotes/server/*` is replaced > > by `--refmap='+refs/heads/branch1:refs/remotes/server/branch1'`, > > so these are what would be done: > > branch1 -> server/branch1 > > This is totally expected. > > A refspec specifies "what to fetch" and "where to store locally what > we fetched" at the same time. A refmap only specifies the "where > the stuff is stored locally" part, and what to fetch is specified > separately. You asked branch1 and branch2 to be fetched (peek into > the .git/FETCH_HEAD file to see both objects are fetched) from the > command line arguments, and your refmap specified where to store > what you got from their refs/heads/branch1. As the refmap does not > say anything about any other branches, they are not stored anywhere > in your local refs/ namespace. > > Typically --refmap is given with a glob, but the story is the same > there. If you fetched refs/notes/commits from that same server with > a refmap to map "refs/heads/*:refs/remotes/server/*", the notes commit > is not mapped to anywhere with the refmap, so nothing will happen to > it. > >