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.
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>".
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.
This did the job for me:
git gc --prune=now
For me, it worked to remove the files that are throwing errors from the folder .git/refs/remotes/origin/.
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.
Go to under flutter folder and then,
Try it:
git gc --prune=now
git remote prune origin
git pull
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 Git 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.
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.
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.
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
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.
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.
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
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.
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)
I was able to work with
git remote update --prune
$ rm .git/refs/remotes/origin/master
$ git fetch
From bitbucket.org:xx/mkyong-tutorials
df0eee8..3f7af90 master -> origin/master
$ git pull
Already up to date.
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 git#server-address.org: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/
delete file for particular branch manually from your project
.git/refs/remotes/origin/master
git gc --prune=now
git pull
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)
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.
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.
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 want 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 {}
Tried these but didn't work for me:
$ git gc --prune=now
$ git remote prune origin
$ git fetch --prune
I had to get this fixed by deleting the local folder and cloning again.
I had same issue. i follow following steps
1)switch your branch which having issue to other branch
2) delete that branch
3) checkout again.
Note:- You can stash you uncommitted changes and put it back again.
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.
I used git prune origin and that did the work.
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.
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.
# remove the reference file of the branch "lost"
rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader
# git clear everything
clear ; git reset HEAD --hard ; git clean -xdf ;
# subdue the current branch and pull all changes from the remote
clear ; git fetch --all -p ; git pull --all --rebase ; clear ; git branch -a
# 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
Since I have more than 100 projects to be created in Gitlab, is there a way that creation till push to repository can be automated.
Create project->Clone the repo.->Push modified files.
This flow needs to be automated.
Please provide me reference incase of no specifics.
Projects don't have to be created in advance. You can just push to any namespace to create projects.
git remote add origin ssh://git#gitlab.example.com/mynamespace/my-newproject.git
git push -u origin --all
You'll see the server respond back with a message like this:
remote: The private project mynamespace/my-newprojct was successfully created.
If you wanted a script to create a project from scratch, you might do something like this:
#!/usr/bin/env bash
# create-project.sh
gitlab_host="gitlab.example.com" # replace with your host
project_path=$1
project_name="$(basename "${project_path}")"
mkdir "$project_name"
pushd "$project_name"
echo "# ${project_name}" > README.md
# Put any additional project file creation steps here
git init
git checkout -b main
git add .
git commit -m "initial commit"
git remote add origin "ssh://git#${gitlab_host}/${project_path}.git"
git push -u origin main
popd
Usage:
./create-project.sh mynamespace/my-newproject
This will create a directory my-newproject, setup repo files, remote, and push it to GitLab creating the project.
I'm trying to push an octopress to github page,everything has worked fine up to now but when i do the rake deploy command after displaying octopress files i get the following error
To git#github.com:rukshn/rukshn.github.io.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git#github.com:rukshn/rukshn.github.io.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
what's the problem?
Since this is the master branch, i.e., the one running your generated pages, you need to drop into the _deploy directory, then do the git pull origin master. Somehow your deploy directory has gotten out of sync. Do you have more than one local repo you write to and deploy from? (Say on different machines...) If you do, then you should always make sure to sync your the sources on the various repos as well.
do
cd _deploy
git reset --hard origin/master
cd ..
and try again
rake generate
rake deploy
Try:
git checkout source
rake gen_deploy
#slavik comment works like a charm.
#Benjamin I think #rksh skipped below steps,
Don't forget to commit the source for your blog.
git add .
git commit -m 'add source code to source branch'
git push origin source
I met the problem and solved it by removing the master branch in the _deploy folder in the source branch. The detailed commands are as follows:
// change directory to _deploy
cd _deploy
// check out local master branch
git checkout master
// rename local master to master2
git branch -m master2
// list of remote branch
git branch -r
// create a new local master branch and tracking remote master branch
git checkout origin/master -b master
// pull the remote master branch, ensure that the local master branch has Already up-to-date.
git pull
// delete the local master2 branch if not needed.
git branch -d master2
```
So to make a long story short, I've been working on a web app for the past few months. Recently I had to get a new laptop and cloned the repository from github onto my new machine... However whenever I commit changes to my app and attempt to use git push -u in the app's root directory i get the following message:
To git#github.com:acc/etc.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git#github.com:acc/etc.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
but when I try git pull git#github.com:acc/etc.git master I get a message telling me that the pull was aborted.
From github.com:acc/etc
* branch master -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
config/routes.rb
test/fixtures/users.yml
Please, commit your changes or stash them before you can merge.
Aborting
so then i commit my changes using git commit -m 'fixing' and then attempt git pull again.
however this time I got messages stating that practically all my files had an "Auto-Merging CONFLICT"
am i totally screwed with this particular repository? I'm not really sure what to do since git is still somewhat new to me....
am i totally screwed with this particular repository?
No, but you will have to do a manual merge, since Git can't figure it out. git status will tell you which files need editing. The files themselves contain markers indicating where you should edit. When that's done, git push should work again.
If the changes aren't that big, consider making a copy of the entire folder/project in a different directory outside of the project, then git reset --hard HEAD will wipe out, erase and delete your recent changes.
You can then apply them again individually using your save3d copies for refernce.
Make sure sure you git add before git commit of course.
Finally if you get auto commit merge issues you can always just edit the files manually to resolve.
I have created a git server on my Windows 7 box following Tim Davis' tutorial
Got everything working up to the part of actually trying to clone the repository.
I have a repo located on my server at:
C:\SSH\home\repos\testapp.git that I have initialized using git --bare init as per the tutorial, and try to clone it using GiT GUI via:
ssh://repos#myurl/SSH/home/repos/testapp.git
but get an error dialog popping up describing "Clone failed. Cannot determine HEAD. See console output for details." and "Couldn't find remote ref HEAD".
I tried making a new repo out of an existing project folder (hoping that this 'ref' would magically correct itself) but the same thing message occurs.
Is there something more after a '--bare' or an 'init' that needs to be done to set the head reference?
Most probably it's failing because it is an empty repository. You can try to add an initial ( dummy commit if needed ) to the repository and try the cloning again. Steps below if you don't know to do this.
Can you do this:
cd /home/repos
mkdir testapp.wd
cd testapp.wd
git clone ../testapp.git .
<now add some file>
touch README
git add README
git commit -m "Adding a initial commit"
git push origin master
cd ..
rm -rf testapp.wd
Now see if you can do the clone that you were trying.
If remote repository is empty, it will happen. Try to commit something.