After cloning from remote git repository (at bettercodes) I made some changes, commited and tried to push:
git push origin master
Errors with:
error: cannot lock existing info/refs
fatal: git-http-push failed
This case regards already existing repository.
What I did before, was:
git config –global http.sslVerify false
git init
git remote add [url]
git clone
git commit
At 'bettercodes' I have no access to git log.
I'm using Windows. The detailed error was:
C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:[email protected]/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed
I cloned before, then changed the code and committed.
This question is related to
git
This is how it works for me.
Even faster alternative:
cat /dev/null > /var/lock/apache2/DAVlock
Before pull you need to clean your local changes. following command help me to solve.
git remote prune origin
and then after
git pull origin develop
Hopes this helps!
In my case, it was connected with the branch name that I had already created.
To fix the issue I've created a branch with the name that for certain shouldn't exist, like:
git checkout -b some_unknown_branch
Then I've cleared all my other branches(not active) because they were just unnecessary garbage.
git branch | grep -v \* | grep -v master | xargs git branch -D
and then renamed my current branch with the name that I've intended, like:
git checkout -m my_desired_branch_name
This is probably resolved by now. But here is what worked for me.
Location:
If locked repository is on the server-side:
If locked repository is local only:
Run this command:
git update-server-info
Fix the permissions on your (remote or/and local) repository if you have to. In my case I had to chmod
to 777
and chown
to apache:apache
Try to push again from the local repository:
git push
Check that you (git process actually) have access to file .git/info/refs
and this file isn't locked by another process.
This sounds like a permissions issue - is it possible you had two windows open, executing with separate rights? Perhaps check ownership of the .git folder.
Perhaps check to see if there is an outstanding file lock open, maybe use lsof to check, or the equivalent for your OS.
In my case I had to manually delete old tags which had been removed on remote.
What worked for me was:
.git/logs/refs/remotes/origin/branch
.git/refs/remotes/origin/branch
git gc --prune=now
Run git fetch --all
before git pull
. That should solve the problem.
In case of bettercodes.org, the solution is more poetic - the only problem may be in rights assigned to the project members. Simple members don't have write rights! Please make sure that you have the Moderator or Administrator rights. This needs to be set at bettercodes.org at the project settings by an Administrator, of course.
I had this problem, when I was trying to create a new feature branch that contained name of the old branch, e.g. origin - branch1 and I wanted to create branch1-feature. It wasn't possibble, but branch1/feature was already.
This happened to me when my git remote (bitbucket.org) changed their IP address. The quick fix was to remove and re-add the remote, then everything worked as expected. If you're not familiar with how to remove and re-add a remote in git, here are the steps:
Copy the SSH git URL of your existing remote. You can print it to the terminal using this command:
git remote -v
which will print out something like this:
origin [email protected]:account-name/repo-name.git (fetch)
origin [email protected]:account-name/repo-name.git (push)
Remove the remote from your local git repo:
git remote rm origin
Add the remote back to your local repo:
git remote add origin [email protected]:account-name/repo-name.git
Update:
You might need to edit your ~/.netrc file:
Original answer:
Why did you disable ssl? I think this might have to do with you not being able to push via https. I'd set it back and try to push again:
git config –global http.sslVerify true
In my case a branch was moved to a subdirectory and the directory was called as the branch. Git was confused by that. When I deleted the local branch (in SourceTree just with right click delete) everything worked as usual.
In my case after getting this message I did the checkout command and was given this message:
Your branch is based on 'origin/myBranch', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
After running this command I was back to normal.
Aside from the many answers already supplied to this question, a simple check on the local repo branches that exist in your machine and those that don't in the remote, will help. In which case you don't use the
git prune
command as many have suggested.
Simply delete the local branch
git branch -d <branch name without a remote tracking branch by the same name>
as shown in the attached screenshot using -D to force delete when you are sure that a local branch does not have a remote branch tracked.
I had a typical Mac related issue that I could not resolve with the other suggested answers.
Mac's default file system setting is that it is case insensitive.
In my case, a colleague obviously forgot to create a uppercase letter for a branch i.e.
testBranch/ID-1 vs. testbranch/ID-2
for the Mac file system (yeah, it can be configured differently) these two branches are the same and in this case, you only get one of the two folders. And for the remaining folder you get an error.
In my case, removing the sub-folder in question in .git/logs/ref/remotes/origin resolved the problem, as the branch in question has already been merged back.
For me this worked:
git remote prune origin
Since this answer seems to help a lot of people, I dug a little bit into what actually happens here. What this will do is remove references to remote branches in the folder .git/refs/remotes/origin
. So this will not affect your local branches and it will not change anything remote, but it will update the local references you have to remote branches. It seems in some cases these references can contain data Git cannot handle correctly.
You want to try doing:
git gc --prune=now
See https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
for me, removing .git/info/ref
kick things going.There shouldn't be a ref
file when git is not running. But in my case there were one for whatever reason and caused the problem.
Removing the file will not remove any of your local commits or branches.
I fixed this by doing the following
git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull
This assuming that your local and remote branches are aligned and you are just getting the refs error as non fatal.
This is what I did to get rid of all the lock ref issues:
git gc --prune=now
git remote prune origin
This is probably what you only need to do too.
I had this issue because I was on a branch that had a similar name to an upstream branch. i.e. the upstream branch was called example-branch
and my local branch was called example-branch/backend
. The solution was changing the name of my local branch like so:
git branch -m <new name goes here>
I saw this error when trying to run git filter-branch
to detach many subdirectories into a new, separate repository (as in this answer).
I tried all of the above solutions and none of them worked. Eventually, I decided I didn't need to preserve my tags all that badly in the new branch and just ran:
git remote remove origin
git tag | xargs git tag -d
git gc --prune=now
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA/ libs/xxx' --prune-empty -- --all
Running command git update-ref -d refs/heads/origin/branch
fixed it.
Source: Stackoverflow.com