From: Jeff King Date: Thu, 26 Jan 2017 21:18:34 GMT Subject: Re: "git fetch -p" incorrectly deletes branches Message-ID: <20170126211834.eplmjcohv3d4zsym@sigill.intra.peff.net> In-Reply-To: <20170117060428.nanqz5lr4hi6dum6@reimardoeffinger.de> On Tue, Jan 17, 2017 at 07:04:28AM +0100, Reimar Döffinger wrote: > 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 Hmm. It seems like the problem is that "-p" is saying "the other side does not have refs/heads/test; we must prune it". But I think it is probably nonsense to apply pruning to a non-wildcard refspec. > 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. There is a separate issue of whether it is sane to apply fetch.prune to a refspec given on the command line; I can imagine it as surprising, to say the least. I think "--no-prune" would disable it, though. -Peff