Re: Simple git push --tags deleted all branches
From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2018-11-29 15:39:13
On Thu, Nov 29 2018, Mateusz Loskot wrote:
On Thu, 29 Nov 2018 at 16:03, Ævar Arnfjörð Bjarmason [off-list ref] wrote:quoted
On Wed, Nov 28 2018, Mateusz Loskot wrote:quoted
(using git version 2.19.2.windows.1) I've just encountered one of those WTH moments. I have a bare repository core.git (BARE:master) $ git branch 1.0 2.0 * master core.git (BARE:master) $ git tag 1.0.1651 1.0.766 2.0.1103 2.0.1200 I published the repo using: git push --all --follow-tags This succeeded, but there seem to be no tags pushed, just branches. So, I followed with core.git (BARE:master) $ git push --tags To XXX - [deleted] 1.0 - [deleted] 2.0 ! [remote rejected] master (refusing to delete the current branch: refs/heads/master) error: failed to push some refs to 'XXX' And, I've found out that all branches and tags have been wiped in both, local repo and remote :) I restored the repo and tried out git push origin 1.0 git push origin --tags and this time both succeeded, without wiping out any refs. Could anyone help me to understand why remote-less git push --tags is/was so dangerous and unforgiving?!Since nobody's replied yet, I can't see what's going on here from the info you've provided. My guess is that you have something "mirror" set on the remote.Thank you for responding. The git push --tags hugely surprised me, and here is genuine screenshot https://twitter.com/mloskot/status/1068072285846859776quoted
It seems you can't share the repo or its URL, but could you share the scrubbed output of 'git config -l --show-origin' when run inside this repository?Here is complete output. I have not stripped the basics like aliases, just in case.
Right, it's because you used --mirror, the important bit:
file:config remote.origin.url=https://xxx.com/core-external-metadata.git file:config remote.origin.fetch=+refs/*:refs/* file:config remote.origin.mirror=true file:config
I.e. you have cloned with the --mirror flag, this is what it's supposed to do: https://git-scm.com/docs/git-clone#git-clone---mirror https://git-scm.com/docs/git-fetch#git-fetch---prune I.e. you push and git tries to mirror the refs you have locally to the remote, including pruning stuff in the remote. This is useful, but not what you wanted here. It's used for e.g. making an up-to-date copy of a repo from server A to server B in HA setups where you'd like to fail over to server B and get the same refs you had on A.