Hello! The command: git fetch -p -v origin master:refs/heads/test Deletes refs/heads/test every second time when run repeatedly:
$ git fetch -p -v origin master:refs/heads/test >From https://github.com/git/git * [new branch] master -> test = [up to date] master -> origin/master $ git fetch -p -v origin master:refs/heads/test >From https://github.com/git/git - [deleted] (none) -> test = [up to date] master -> test = [up to date] master -> origin/master (the command is the result of cutting down the test case, so yes it is rather silly, but the issue appears in much less obviously silly cases and causes a lot of confusion) This is specific to the case of specifying the origin branch without "full path" AND the right side with. Wild-guess on cause: "master" is auto-expanded into both "refs/tags/master" and "refs/heads/master" and instead of fetching either/merging the result, both are fetched. Combined with a time-of-check/time-of-use style race condition on the code that checks if a ref is "up to date" on top of it, it would result in this behaviour. Also note that this behaviour appears also when fetch.prune=yes is set in the config (instead of -p on the command-line), which makes it much less obvious and there is no option to turn of prune just for that command to work-around this. I hope someone has the time to make sure nobody else has to debug this ever again ;-) Regards, Reimar Döffinger