git pull fails "unable to resolve reference" "unable to update local ref"

Git

Git Problem Overview


Using git 1.6.4.2, when I tried a git pull I get this error:

error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
 ! [new branch]      LT558-optimize-sql -> origin/LT558-optimize-sql  (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
 ! [new branch]      split-css  -> origin/split-css  (unable to update local ref)
   

I've tried git remote prune origin, but it didn't help.

Git Solutions


Solution 1 - Git

Try cleaning-up your local repository with:

$ git gc --prune=now
$ git remote prune origin

man git-gc(1):

git-gc - Cleanup unnecessary files and optimize the local repository

git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]

       Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
       (to reduce disk space and increase performance) and removing unreachable objects which may have been
       created from prior invocations of git add.

       Users are encouraged to run this task on a regular basis within each repository to maintain good disk
       space utilization and good operating performance.

man git-remote(1):

git-remote - manage set of tracked repositories

git remote prune [-n | --dry-run] <name>

           Deletes all stale remote-tracking branches under <name>. These stale branches have already been
           removed from the remote repository referenced by <name>, but are still locally available in
           "remotes/<name>".            

Solution 2 - Git

Happened to me as well. In my case, the bad ref was master, and I did the following:

rm .git/refs/remotes/origin/master
git fetch

This made git restore the ref file. After that everything worked as expected again.

Solution 3 - Git

This did the job for me:

git gc --prune=now

Solution 4 - Git

For me, it worked to remove the files that are throwing errors from the folder .git/refs/remotes/origin/.

Solution 5 - Git

I just would like to add one of the possible causes of a broken Git reference.

Possible root cause

On my system (Windows 7 64-bit), when a BSOD happens, some of the stored reference files (most likely currently opened/being written into when the BSOD happened) are overwritten with NULL characters (ASCII 0).

As others mentioned, to fix it, it's enough to just delete those invalid reference files and re-fetch or re-pull the repository.

Example

Error message: > cannot lock ref 'refs/remotes/origin/some/branch': unable to resolve reference 'refs/remotes/origin/some/branch': reference broken

Solution:

Delete the reference refs/remotes/origin/some/branch which is stored in the file %repo_root%/.git/refs/remotes/origin/some/branch.

Solution 6 - Git

Try it:

git gc --prune=now

git remote prune origin

git pull

Solution 7 - Git

Explanation: It appears your remote repo (in Github / bitbucket) branches were removed ,though your local references were not updated and pointing to non existent references.

In order to solve this issue:

git fetch --prune
git fetch --all
git pull

For extra reading - Reference from Github documentation :

> git-fetch - Download objects and refs from another repository > --all > Fetch all remotes. > > --prune After fetching, remove any remote tracking branches which no longer exist on the remote.

Solution 8 - Git

Execute the following commands:

rm .git/refs/remotes/origin/master

git fetch

git branch --set-upstream-to=origin/master

> Just in case, if you need to know what is > .git/refs/remotes/origin/master, you would read the Remotes section > in Git References.

Solution 9 - Git

I had this same issue and solved it by going to the file it was erroring on:

\repo\.git\refs\remotes\origin\master

This file was full of nulls, I replaced it with the latest ref from github.

Solution 10 - Git

In my case, the problem was solved after I've deleted all the remove reference files under the directory .git.

If you look at the message, it would tell you which files you need to delete (specifically).

The files to delete sit under .git/refs/remotes.

I've just deleted all the files there, and ran gc prune

git gc --prune=now

After that, everything works just fine.

Solution 11 - Git

git fetch --prune fixed this error for me:

[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref 'refs/remotes/origin/user/janek/integration/20170505': 'refs/remotes/origin/user/janek/integration' exists; cannot create 'refs/remotes/origin/user/janek/integration/20170505'
From github.com:zooxco/driving
 ! [new branch]            user/janek/integration/20170505 -> origin/user/janek/integration/20170505  (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
 - [deleted]               (none)     -> origin/user/janek/integration

This assumes that the offending branch was deleted on the remote, though.

You can also add this to ~/.gitconfig to automatically prune when running git fetch:

[fetch]
    prune = true

Solution 12 - Git

If this error “unable to update local ref” is reoccurring, even after applying either the answer by Vojtech Vitek or Michel Krämer you may you may have a bad ref on your local AND master repository.

In this case you should apply both fix's without pulling or pushing in between ...

rm .git/refs/remotes/origin/master
git fetch
git gc --prune=now
git remote prune origin

A permanent resolution for me was only achieved after applying both fix's before push/pull.

Solution 13 - Git

For me, I solved it this way:

rm .git/refs/remotes/origin/master
git fetch

After that I get this message from github.

There is no tracking information for the current branch

So next I did to fix this was:

git branch --set-upstream-to=origin/master master
git pull

Solution 14 - Git

To Answer this in very short, this issue comes when your local has some information about the remote and someone changes something which makes remote and your changes unsync.

I was getting this issue because someone has deleted remote branch and again created with the same name.

For dealing with such issues, do a pull or fetch from remote.

git remote prune origin

or if you are using any GUI, do a fetch from remote.

enter image description here

Solution 15 - Git

Try this:

git pull origin Branch_Name

Branch_Name, the branch which you are currently on.

If you do only a git pull, it pulls all other created branch name as well.

So is the reason you are getting this:

! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

Solution 16 - Git

I was able to work with

git remote update --prune

Solution 17 - Git

For me, I had a local branch named feature/phase2 and the remote branch was named feature/phase2/data-model. The naming conflict was the cause of the problem, so I deleted my local branch (you could rename it if it had anything you needed to keep)

Solution 18 - Git

If git gc --prune=now dosen't help you. (bad luck like me)

What I did is remove the project in local, and re clone the whole project again.

Solution 19 - Git

I'm using Tower and for some reason my folder name was .git/refs/remotes/origin/Github. Changing it to lowercase .git/refs/remotes/origin/github solved the issue.

Solution 20 - Git

I had same issue. i follow following steps

1)switch your branch which having issue to other branch

  1. delete that branch

  2. checkout again.

Note:- You can stash you uncommitted changes and put it back again.

Solution 21 - Git

I used git prune origin and that did the work.

Solution 22 - Git

Writing down a specific case that might cause this problem.

One day I pushed a branch named "feature/subfeature", while having "feature" branch on remote.

That operation worked fine without any error on my side, but when my co-workers fetched and/or pulled any branch, they all had the exact same error message unable to update local ref, cannot lock ref 'refs/remotes/origin/feature/subfeature.

This was solved by deleting feature branch on remote(git push --delete origin feature) and then running git remote prune origin on my co-workers' repo, which generated messages including * [pruned] origin/feature.

So, my guess is git fetch was trying to create subfeature ref in feature folder on git internally(.git/...), but creating folder failed because there was feature ref already.

Solution 23 - Git

Try this: git branch --unset-upstream

I was facing the problem earlier but I just solved it when I saw this command on the terminal.

Solution 24 - Git

Error: cannot lock ref" simply means information in /refs are corrupted and Git cannot continue to create index.lock file.

Quick fix : Remove and re-add remote.

-1 Copy the SSH git URL of your existing remote. You can print it to the terminal using this command:

git remote -v

2- Remove the remote from your local git repo:

git remote rm origin

3- Add the remote back to your local repo:

git remote add origin [email protected]:your-username/repo-name.git

4- Prune remote origin Users across online forums have reported that the command below worked for them:

git remote prune origin

5- Clean up and optimize local repository git gc --prune=now

You can find more info on this article: https://linuxpip.org/git-error-cannot-lock-ref/

Solution 25 - Git

When it is caused by Google Drive desktop.ini files

Google Drive client for Windows creates desktop.ini files in each folder. If your git repository is in a directory that is being synced with Google Drive, then the desktop.ini files will cause the git repository to fail with something like:

cannot lock ref 'refs/remotes/origin/desktop.ini': unable to resolve reference 'refs/remotes/origin/desktop.ini': reference broken

To solve this error you might wnat to delete the desktop.ini files in your git repository.

If you have WSL setup, then you can use the following command to delete the desktop.ini files:

> Note: ⚠️ This command will delete all desktop.ini files in all .git directories in your <project_directory>.

find <project_directory> -type d -name .git -print0 | xargs -0 -I {} find {} -type f -name desktop.ini -print0 | xargs -0 -I {} rm -vf {}

If you just want to delete the desktop.ini files in a specific .git directory, then you can use the following command:

find <.git_directory> -type f -name desktop.ini -print0 | xargs -0 -I {} rm -vf {}

Solution 26 - Git

I had the same problem with composer update. But for me it only worked after I cleared the composer cache and after deleting the content of the vendor folder:

rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package

Solution 27 - Git

Got this issue when trying to clone from a git bundle created file, none of the other answers worked because I couldn't clone the repo (so git gc and removing/editing files was out of the question).

There was however another way to fix this - the source file of a .bundle file was begining with:

# v2 git bundle
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master

PACK.......p..x...Kj.0...: (and so on...)

Simply removing the fourth line with vim fixed the issue.

Solution 28 - Git

I had this issue while using SourceTree. I tried to pull again and it worked. I think I Was witching branches (checkout) too fast :).

My situation is a bit different from the poster's because my repository has been relatively cooperative, without any apparent corruption.

Solution 29 - Git

Had the same msg but with a directory, got a failed msg on pull.

git --prone did not help me either. Turns out there was a file with the same name as a directory created remotely.

Had to go to .git\logs\refs\remotes\origin and erase the locale file - then pull again, all good.

Solution 30 - Git

 # remove the reference file of the branch "lost"
 rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader
 
 # get all the branches from the master
 git fetch --all

 # git will "know" how-to handle the issue from now on
 #     From github.com:futurice/senzoit-www-server
 # * [new branch]      feature/v1.6.9-api-token-bot-reader ->
 # origin/feature/v1.6.9-api-token-bot-reader

 # and push your local changes
 git push

Solution 31 - Git

Just ran into the problem today.

Troubleshooting method: With SourceTree on Windows Servers, you may try to run it as an Administrator. That fixes my problem of "unable to update local ref" on Atlassian Source Tree 2.1.2.5 on a Windows Server 2012 R2 in domain.

If you can too replicate this situation, it proves that the problem is caused by permission issue. It's better to drill down and find the root cause - probably some particular files are owned by other users and such - otherwise there's an unwelcome side-effect: you'll have to run SourceTree as Administrator for the rest of eternity.

Solution 32 - Git

Faced the same issue when repository was deleted and created with the same name. It worked only when I re-set the remote url like below;

> git remote set-url origin [GIT_REPO_URL]

Verify the remote url:

git remote -v

Now, all commands should work as usual.

Solution 33 - Git

We got this issue when a developer on Mac created a branch with a greater than ">" symbol in the branch name.

That caused problems in TeamCity, and on local Windows based computers running SourceTree. BitBucket let it through without any problems.

To resolve the user removed the branch and recreated it. Which was nice and easy.

Solution 34 - Git

In case anyone finds this useful, I was getting this issue chronically, although not constantly, and it was because I had git directory within Dropbox, removed it from Dropbox and all was fine.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGabrielleView Question on Stackoverflow
Solution 1 - GitVojtech VitekView Answer on Stackoverflow
Solution 2 - GitMichel KrämerView Answer on Stackoverflow
Solution 3 - GitBerndView Answer on Stackoverflow
Solution 4 - GitBrian van RooijenView Answer on Stackoverflow
Solution 5 - GitDavid Ferenczy RogožanView Answer on Stackoverflow
Solution 6 - GitannelorayneView Answer on Stackoverflow
Solution 7 - GitavivamgView Answer on Stackoverflow
Solution 8 - GitMatias SebastiaoView Answer on Stackoverflow
Solution 9 - GitNoel TockView Answer on Stackoverflow
Solution 10 - GitUri ShtandView Answer on Stackoverflow
Solution 11 - GitmarczychView Answer on Stackoverflow
Solution 12 - GitInyokaView Answer on Stackoverflow
Solution 13 - GitDevianceView Answer on Stackoverflow
Solution 14 - GitAbhijeet KambleView Answer on Stackoverflow
Solution 15 - Gituser3832506View Answer on Stackoverflow
Solution 16 - Gituser1238353View Answer on Stackoverflow
Solution 17 - GitNathan WallaceView Answer on Stackoverflow
Solution 18 - GitEric ChenView Answer on Stackoverflow
Solution 19 - Gitsplit19View Answer on Stackoverflow
Solution 20 - Gituser2619659View Answer on Stackoverflow
Solution 21 - GitTheFakeCakeView Answer on Stackoverflow
Solution 22 - Gitik1neView Answer on Stackoverflow
Solution 23 - GitAlex MainaView Answer on Stackoverflow
Solution 24 - GitDaherView Answer on Stackoverflow
Solution 25 - GitJesusIniestaView Answer on Stackoverflow
Solution 26 - GitownkingView Answer on Stackoverflow
Solution 27 - GitKrzysztof BociurkoView Answer on Stackoverflow
Solution 28 - GitPysisView Answer on Stackoverflow
Solution 29 - GitAsaf MaozView Answer on Stackoverflow
Solution 30 - GitYordan GeorgievView Answer on Stackoverflow
Solution 31 - GitLionet ChenView Answer on Stackoverflow
Solution 32 - GitRicky BoyView Answer on Stackoverflow
Solution 33 - GitdylanTView Answer on Stackoverflow
Solution 34 - GitagorapotatoesView Answer on Stackoverflow