3

I cloned an empty repository from a personal git server. After initial push (push -u origin master) I got some error but I pushed inside.

Trying to use git push displays the following:

No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. fatal: The remote end hung up unexpectedly error: failed to push some refs to 'link-top-repository'

Then I tried git push origin master:

Counting objects: 3, done.
Writing objects: 100% (3/3), 218 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
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 to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
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 some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

Problem starts when using git pull:

Your configuration specifies to merge with the ref 'master' from the remote, but no such ref was fetched.

I tried to check .git/config but it seems correct.

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = junior@54blue.com:/repository/regulator
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branc "master"]
        remote = origin

Any suggestions?

user
  • 5,370
  • 8
  • 47
  • 75
  • Possible dup: http://stackoverflow.com/questions/11117823/git-push-error-refusing-to-update-checked-out-branch – jchapa Dec 06 '12 at 15:16

3 Answers3

5

assuming that you have write access to your personal git server, what you are doing is pushing changes to a non-bare repository, and to a branch that are currently checked out as working directory.

The current common good practices is always push to a bare repository. To create it, you could do something like this:

git init --bare SomeRepo.git

if you insist on pushing to a non-bare repository, which is not recommended, make sure that the branch that you are going to push to is not the current checked out branch or the current working directory. just open a command line tools, such as terminal in Linux or git bash in windows, move to your repository directory (the one that has a folder .git in it), execute this command:

git branch -v

it will show all the available branches of that repository, and the branch that currently checked out is marked with '*', for example:

* master        b0bb0b1 some commit message
  development   babbab2 some other commit message
  experimental  bebbeb3 some commit message in experiment

the example above shows that master is the currently checked out branch, thus you couldn't push to it. But you could push to other branches, such as development or experimental. If you must push to master, you could do it by changing the current directory to other branches, using this command:

git checkout the_branch_name

after this, the currently checked out is the branch that specified in above command, pushing to master is now possible.

Riza
  • 1,144
  • 8
  • 19
0

Remove this from the end of your file.

[branc "master"]
        remote = origin

Also - your central Git repository where your developers push to, should be a bare repository. Your error logs show that yours isn't.

Rawkode
  • 21,990
  • 5
  • 38
  • 45
0

I had a similar problem and found the answer in the Unix stack-exchange: https://unix.stackexchange.com/a/166713

In my case, my local branch and remote branch had different capitalization.

To resolve this I deleted my local branch $ git branch -d branch-name, then checked out the remote branch again using $ git fetch and $ git checkout Branch-name.

So deleting the local branch and checking out the remote branch again fixed it.

Community
  • 1
  • 1
Sander
  • 390
  • 1
  • 4
  • 13