git push fails: `refusing to update checked out branch: refs/heads/master`

I want to store my local modifications to JBoss config in git. For this, I have set up the following structure:

lrwxrwxrwx  1 jboss jboss        19 Jan 24 11:53 current -> jboss-as-7.1.0.CR1b
drwxr-xr-x 11 jboss jboss      4096 Jan 24 12:13 jboss-as-7.1.0.CR1b
-rw-r--r--  1 jboss jboss 108211143 Jan 23 16:02 jboss-as-7.1.0.CR1b.tar.gz
drwxr-xr-x  6 jboss jboss      4096 Jan 24 11:36 local

local is the git repository which shall be the “origin”. The idea is that I want to be able to easily update my JBoss distribution once an update is available. I want to store all local modifications to the distributed JBoss package in git.

  • git subdirectory which is ignored
  • What is the purpose and function of Xcode's source control “Show Remote Status” menu option?
  • git word-diff-regex that works with multiline changes?
  • Re-doing a reverted merge in Git
  • git merge upstream and the rebase further down causes me to merge again
  • delete a folder from client machine, if git previleges are revoked
  • So, currently I do this:

    jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git init
    Initialized empty Git repository in /opt/jboss/jboss-as-7.1.0.CR1b/.git/
    jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git remote add origin ../local/   
    jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git pull origin master 
    From ../local
     * branch            master     -> FETCH_HEAD
    

    So far so good, all my local modifications are there where I want them.

    However, once I have local modifications and want to bush them back to the local repository, I get an error:

    jboss@tpl0:~/jboss-as-7.1.0.CR1b$ vim standalone/configuration/standalone.xml   
    jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git commit -a -m "renamed database to project2_core,   to distinguish from other projects"
    [master 3e54f34] renamed database to project2_core, to distinguish from other projects
    Committer: jboss <jboss@tpl0.(none)>
     1 files changed, 1 insertions(+), 1 deletions(-)
    
    jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git push origin master 
    Counting objects: 9, done.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (5/5), 447 bytes, done.
    Total 5 (delta 3), reused 0 (delta 0)
    Unpacking objects: 100% (5/5), done.
    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: error: is denied, because it will make the index and work tree inconsistent
    remote: error: with what you pushed, and will require 'git reset --hard' to match
    remote: error: the work tree to HEAD.
    remote: error: 
    remote: error: You can set 'receive.denyCurrentBranch' configuration variable t
    remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int
    remote: error: its current branch; however, this is not recommended unless you
    remote: error: arranged to update its work tree to match what you pushed in som
    remote: error: other way.
    remote: error: 
    remote: error: To squelch this message and still keep the default behaviour, se
    remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
    To ../local/
     ! [remote rejected] master -> master (branch is currently checked out)
    error: failed to push some refs to '../local/'
    

    What can I do about this? Any help is greatly appreciated!

    EDIT

    Here’s what I did, which solved the problem:

    cd ~/current
    git init
    vim .gitignore                   # set up a basic .gitignore file
    git add .gitignore
    git commit -a -m "initial commit"
    cd ~/local
    git clone ~/current
    git branch -m master current     # rename master branch to 'current'
    git branch repo
    git checkout repo
    

    Now, the branch current in directory ~/local is always up-to-date, but it’s not cheked out, so that i can push into it.

  • JIRA: How to make a webhook fire for only a single transition, of a workflow?
  • Trigger jenkins build on stash pull request
  • Create a git repository that contains another git repository
  • Git submodule always checking out particular commit
  • how to resolve version number conflicts of script in flywaydb
  • Download Android code for Contacts application
  • 6 Solutions collect form web for “git push fails: `refusing to update checked out branch: refs/heads/master`”

    The master branch at remote site is checked out. If you have access to remote repository, checkout any other branch and then push from your repository.

    Pushing is meant for bare repos. For non-bare repos you should pull into them.

    If you want to force this through anyway, you can do as the error message states and set receive.denyCurrentBranch to ignore. SSH to the location of the repo you are pushing to and run:

    git config receive.denyCurrentBranch ignore
    

    Create the origin (local) repository as a bare repository (ie. git init –bare), or checkout a branch in there which is not master.

    OR,

    when you initialize your remote project, using

    git init --bare
    

    I managed to get round this by pulling from ‘local’ in ‘current’ rather than pushing to ‘current’ from ‘local’.

    I know this is quite an old question, but if you go with git init –bare, watch out for ‘GIT_DIR=.’ which will be set for a bare repo hook if using hooks to checkout the repo after pushing. Use ‘export GIT_DIR=.git’ in your hook routine to make it recognise the repo you are pulling into….

    Git Baby is a git and github fan, let's start git clone.