specific - git pull remote branch example
Git fetch remote branch (17)
My colleague and I are working on the same repository we've branched it into two branches each technically for different projects, but they have similarities so we'll sometimes want to commit back to the *master from the branch.
However, I have the branch. My question is, how can my colleague pull that branch specifically? A
git clone of the repo does not seem to create the branches locally for him, though I can see them live on unfuddle after a push on my end.
Also, when I originally made the branch I did
-b checkout. Not sure if that makes much difference?
iMac:test_solar dave$ git branch -r origin/HEAD -> origin/master origin/daves_branch origin/discover origin/master git fetch origin discover git checkout discover
These are the commands I ran. But it definitely is not working. I want to be able to check out that branch and then push and commit back just the branches changes from various collaborators or workstations.
git fetch --all & git checkout <branch name>
git branch <name> --track origin/<name>
The title and the question are confused:
- Git fetch remote branch
- how can my colleague pull that branch specifically.
If the question is how can I get a remote branch to work with or how to git checkout a remote branch, a simpler solution is:
With git (>= 1.6.6) you are able to use:
git checkout <branch_name>
<branch_name> is not found but there does exist a tracking branch in exactly one remote with a matching name, treat as equivalent to:
git checkout -b <branch_name> --track <remote>/<branch_name>
For your friend:
$ git checkout discover Branch discover set up to track remote branch discover Switched to a new branch 'discover'
A simple command -"git checkout remote_branch_name" will help you to create a local branch that has all the changes in remote branch.
.git/config, particulary what tracking is present on fetch for that remote.
[remote "randomRemote"] url = [email protected]:someUser/someRepo.git fetch = +refs/heads/*:refs/remotes/randomRemote/*
If it has
heads/* pointing to
randomRemote/*, when you run
git fetch randomRemote, it will fetch all branches.
Then you can just checkout that branch.
You need to add remote branches to the tracking using this. Check your
.git/configafter running this. You will understand. git remote set-branches --add randomRemote randomBranch
git fetch randomRemote. This will fetch the remote branch.
Now you can run
git checkout randomBranch
git fetch <remote> <rbranch>:<lbranch> git checkout <lbranch>
<rbranch> is the remote branch or source ref and
<lbranch> is the as yet non-existent local branch or destination ref you want to track and which you probably want to name the same as the remote branch or source ref. This is explained under options in the explanation of
Git is so smart it auto completes the first command if I tab after the first few letters of the remote branch. IE: I don't even have to name the local branch, Git automatically copies the name of the remote branch for me. Thanks Git!
Also as the answer in this similar SO post shows, if you don't name the local branch in
fetch, you can still create it when you check it out by using the
-b flag. IE:
git fetch <remote> <branch> followed by
git checkout -b <branch> <remote>/<branch> does exactly the same as my initial answer. And evidently if your repo has only one remote, then you can just do
git checkout <branch> after
fetch and it will create a local branch for you. EG: You just cloned a repo and want to check out additional branches from the remote.
I believe that some of the documentation for
fetch may have been copied verbatim from
pull. In particular the section on
<refspec> in options is the same. However, I do not believe that
fetch will ever
merge, so that if you leave the destination side of the colon empty
fetch should do nothing.
git fetch <remote> <refspec> is short for
git fetch <remote> <refspec>: which would therefore do nothing, but
git fetch <remote> <tag> is the same as
git fetch <remote> <tag>:<tag> which should copy the remote
I guess this is only helpful if you want to copy a remote branch locally, but not necessarily check it out right away. Otherwise I now would use the accepted answer above, which is explained in detail in the first section of the checkout description and later in the options section under the explanation of
--track, since it's a 1-liner. Well... sort of a 1-liner, because you would still have to run
git fetch <remote> first.
FYI: The order of the
<refspecs> (source:destination) explains the bizarre pre Git-1.7 method for deleting remote branches. IE: Push nothing into the destination refspec.
If you already know your remote branch like so...
git remote => One => Two
and you know the branch name you wish to checkout ex. br184.108.40.206 then do
git fetch One => returns all meta data of remote i.e. the branch name in question.
all that is left is to checkout the branch
git checkout br.220.127.116.11
Then make any new branches off of it.
If you are trying to "checkout" a new remote branch (that exists only on the remote, but not locally), here's what you'll need:
git fetch origin git checkout --track origin/<remote_branch_name>
This assumes you want to fetch from origin. If not, replace origin by your remote name.
Let's say that your remote is [email protected] and you want its random_branch branch. The process should be as follows:
First check the list of your remotes by
git remote -v
If you don't have the [email protected] remote in the above command's output, you would add it by
git remote add xyz [email protected]
- Now you can fetch the contents of that remote by
git fetch xyz
- Now checkout the branch of that remote by
git checkout -b my_copy_random_branch xyz/random_branch
- Check the branch list by
git branch -a
The local branch my_copy_random_branch would be tracking the random_branch branch of your remote.
The easiest way to do it, at least for me:
git fetch origin <branchName>
To checkout myBranch that exists remotely and not a locally - This worked for me:
git fetch --all git checkout myBranch
I got this message:
Branch myBranch set up to track remote branch myBranch from origin Switched to a new branch 'myBranch'
git branch -a (both local and remote branches) or
git branch -r (only remote branches) to see all the remotes and their branches. You can then do a
git checkout -t remotes/repo/branch to the remote and create a local branch.
There is also a git ls-remote command to see all the refs and tags for that remote.
With this simple command:
git checkout -b 'your_branch' origin/'remote branch'
You can fetch and checkout the remote branch in one shot too:-
git fetch && git checkout the-branch-name
You use 'git pull' to keep your branches separate. I will use actual repo and branch names to help since 'lbranch' and 'rbranch' is tough to decipher.
You, or any colleague, can run this to pull only your branch, no matter how many branches there are:
git init git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
$git pull origin your_branch_name
git fetch git branch -r git checkout <branch_name>