Git pull and push don't work
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.
Related videos on Youtube
Jānis Gitendorfs
Updated on June 25, 2022Comments
-
Jānis Gitendorfs almost 2 years
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 = [email protected]:/repository/regulator [branch "master"] remote = origin merge = refs/heads/master [branc "master"] remote = origin
Any suggestions?
-
Jānis Gitendorfs over 11 yearsRemoved that 2 lines. But nothing changed. All same.
-
Rawkode over 11 yearsLooks like to pushing to a non-bare repository. Why is that?
-
Jānis Gitendorfs over 11 yearsso i need to create repository which is --bare ?
-
Rawkode over 11 yearsIf that is your "central" repository, then yes, it should be bare. Means it can't be modified locally and your pushes won't cause problems.