Search code examples
gitgit-push

Why will git not let me delete a remote branch


I have a local repository that I want to mirror to the remote 'websrv'. This used to work fine until I deleted a local branch. Now when I do

git push --mirror websrv

I get

remote: error: By default, deleting the current branch is denied, because the next
remote: error: 'git clone' won't result in any file checked out, causing confusion.
remote: error: 
remote: error: You can set 'receive.denyDeleteCurrent' configuration variable to
remote: error: 'warn' or 'ignore' in the remote repository to allow deleting the
remote: error: current branch, with or without a warning message.
remote: error: 
remote: error: To squelch this message, you can set it to 'refuse'.
remote: error: refusing to delete the current branch: refs/heads/ecoli-moments
To git@141.89.117.199:~/baki_tracking.git
 ! [remote rejected] ecoli-moments (deletion of the current branch prohibited)

The branch 'ecoli-moments' points to the same commit as master, local and remote.

What can I do about this so that the remote branch will be properly deleted?

Update:

The remote repository is bare, I checked the directory on the server (the config file has bare=true).


Solution

  • Even a bare repository has a current branch. It is the one that will be checked out by default when you clone the repository. Git does not want to delete it and is telling you why.

    The default branch is the special HEAD reference. Modify it to point to something that is expected to always exist, or to point to a revision. See also How does origin/HEAD get set?.

    You'll have to change what HEAD points to manually using git symbolic-ref(1) on the server.

    Or you can set the option mentioned in the error to false (git config receive.denyDeleteCurrent false on the server); if it's just a backup (--mirror is mostly appropriate only for backup), the default branch does not really matter.