Hi all, I appreciate the help offered in identifying what I was doing incorrectly. Upon further investigation, I remembered why I added the original `origin.fetch` parameter: I was compensating for shallow clones not fetching all remote refs. Here's the use case that I have: [root@chabuduo ~]# useradd -m git-test -s /bin/bash [root@chabuduo ~]# sudo --preserve-env=SSH_AUTH_SOCK -u git-test -i [git-test@chabuduo ~]$ git clone --depth=1 git@xxxxxxxxxx:git/git.git Cloning into 'git'... The authenticity of host 'github.com (192.30.255.112)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts. remote: Enumerating objects: 3664, done. remote: Counting objects: 100% (3664/3664), done. remote: Compressing objects: 100% (3282/3282), done. remote: Total 3664 (delta 276), reused 1921 (delta 232), pack-reused 0 Receiving objects: 100% (3664/3664), 8.31 MiB | 9.61 MiB/s, done. Resolving deltas: 100% (276/276), done. [git-test@chabuduo ~]$ cd git/ [git-test@chabuduo git]$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master Running a shallow clone results in only the remote `HEAD` ref being fetched, as observed by the last `git branch -a`. No additional refs are fetched, even when promoting the shallow repository to a full one: [git-test@chabuduo git]$ git pull --unshallow remote: Enumerating objects: 255783, done. remote: Counting objects: 100% (255777/255777), done. remote: Compressing objects: 100% (62079/62079), done. remote: Total 253423 (delta 193725), reused 249056 (delta 189413), pack-reused 0 Receiving objects: 100% (253423/253423), 94.28 MiB | 33.96 MiB/s, done. Resolving deltas: 100% (193725/193725), completed with 2155 local objects. remote: Enumerating objects: 709, done. remote: Total 709 (delta 0), reused 0 (delta 0), pack-reused 709 Receiving objects: 100% (709/709), 363.70 KiB | 12.12 MiB/s, done. From github.com:git/git * [new tag] gitgui-0.10.0 -> gitgui-0.10.0 * [new tag] gitgui-0.10.1 -> gitgui-0.10.1 ... Already up to date. [git-test@chabuduo git]$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master How I've managed to work around the issue is by force fetching all refs, as explained in the example at https://git-scm.com/docs/git-fetch#CRTB: [git-test@chabuduo git]$ git fetch origin '+refs/heads/*:refs/remotes/origin/*' remote: Enumerating objects: 1218, done. remote: Counting objects: 100% (1218/1218), done. remote: Total 7699 (delta 1218), reused 1218 (delta 1218), pack-reused 6481 Receiving objects: 100% (7699/7699), 4.31 MiB | 17.22 MiB/s, done. Resolving deltas: 100% (4881/4881), completed with 435 local objects. From github.com:git/git * [new branch] maint -> origin/maint * [new branch] next -> origin/next * [new branch] pu -> origin/pu * [new branch] todo -> origin/todo This populates the missing references from a shallow clone: [git-test@chabuduo git]$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/maint remotes/origin/master remotes/origin/next remotes/origin/pu remotes/origin/todo I've created an alias that allows for filling out refs for future shallow clones: % git config --global alias.fetcha '!f() { remote="${1:-origin}"; git fetch "$remote" "+refs/heads/*:refs/remotes/$remote/*"; }; f' I'm also interested in more efficient ways to obtain all refs from shallow clones, if anyone has better ideas. Thanks for taking the time to help me understand, Alex