How do I "undo" a --single-branch clone?
GitGithubGit Problem Overview
I cloned a repo using the
git clone -b <branch name> --single-branch <github url> <target directory>
This cloned ONLY this branch, but now I want to switch to the master and other branches. Is there any way besides clearing it out and starting over to clone the rest of the repo that I can undo the --single-branch preference?
Git Solutions
Solution 1 - Git
You can tell Git to pull all branches like this:
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
If you look in .git/config
, it'll look something like this:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
I compared this to a full clone, and saw that the only difference was the "fetch" under [remote "origin"]
.
Note: I'm running Git version 1.8.2. The config options may have changed if you're running an older version of Git. If my commands don't work, then I'd recommend looking through .git/config
to see if you can see something similar.
Solution 2 - Git
If you want to add a single branch, you can do the following:
git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]
Works with git version 1.9.1
Solution 3 - Git
To add another remote branch to my local repository that was cloned using --single-branch
, the following works for me:
git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]
You can also use wildcards for [remote-branch]
, e.g.
git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5
This works using git version 2.21.1. Other answers suggesting to do git fetch origin [remote-branch]:[local-branch]
did not work as it creates the local branch in an untracked state. When running git pull
it first tried to merge all the commits of the remote branch to my local one once again.
Solution 4 - Git
For me worked:
git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
Solution 5 - Git
Just add the original repo as a new remote, and work off of there?
git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin
You can even delete your current 'origin' remote and rename 'myNewOrigin' to 'origin' if you would want to.
From there you can pull/merge/rebase.
Solution 6 - Git
Just change .git/config
file of your local repo, line fetch
of [remote origin] section
.
Before something like this
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/master:refs/remotes/origin/master
After it will be so
[remote "origin"]
url = https://github.com/owner/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Solution 7 - Git
I initially applied Dominik Pawlak's answer and it worked. But I wasn't able to pull any further changes, after I committed more code into my new branch.
There is another way of resetting single-branch
entirely, which hasn't been mentioned here:
git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch} {yourBranch}
git pull
This resets everything to the original.