Somebody pushed a branch called test
with git push origin test
to a shared repository. I can see the branch with git branch -r
. How do I check out the remote test
branch? I've tried:
git checkout test
, which does nothinggit checkout origin/test
gives * (no branch)
upstream
, not just origin
, and every recommended answer doesn't do anything remotely helpful (pun-intended). EDIT - excuse me, the multitude of suggestions contained in the top 2 answers were useless; 3rd one (git branch test origin/test
) is what works. Glad the top 2 have 20x the number of votes... - anyone git fetch
on the command line created that reference, then I was able to checkout the branch as per several answers. - anyone git fetch
then git switch
- anyone The answer has been split depending on whether there is one remote repository configured or multiple. The reason for this is that for the single remote case, some of the commands can be simplified as there is less ambiguity.
Updated for Git 2.23: For older versions, see the section at the end.
In both cases, start by fetching from the remote repository to make sure you have all the latest changes downloaded.
$ git fetch
This will fetch all of the remote branches for you. You can see the branches available for checkout with:
$ git branch -v -a
...
remotes/origin/test
The branches that start with remotes/*
can be thought of as read only copies of the remote branches. To work on a branch you need to create a local branch from it. This is done with the Git command switch
(since Git 2.23) by giving it the name of the remote branch (minus the remote name):
$ git switch test
In this case Git is guessing (can be disabled with --no-guess
) that you are trying to checkout and track the remote branch with the same name.
In the case where multiple remote repositories exist, the remote repository needs to be explicitly named.
As before, start by fetching the latest remote changes:
$ git fetch origin
This will fetch all of the remote branches for you. You can see the branches available for checkout with:
$ git branch -v -a
With the remote branches in hand, you now need to check out the branch you are interested in with -c
to create a new local branch:
$ git switch -c test origin/test
For more information about using git switch
:
$ man git-switch
git switch
was added in Git 2.23, prior to this git checkout
was used to switch branches.
To checkout out with only a single remote repository:
git checkout test
if there are multiple remote repositories configured then it becomes a bit longer
git checkout -b test <name of remote>/test
Answered 2023-09-20 19:53:47
git fetch
before doing this so that git is aware of origin/test
- anyone git fetch origin test
- anyone origin/test
which can not be resolved as commit?" - anyone git checkout test
will NOT work in modern git if you have multiple remotes which have the same branch name. It can't know which one to use. - anyone Sidenote: With modern Git (>= 1.6.6), you are able to use just
git checkout test
(note that it is 'test' not 'origin/test') to perform magical DWIM-mery and create local branch 'test' for you, for which upstream would be remote-tracking branch 'origin/test'.
The * (no branch)
in git branch
output means that you are on unnamed branch, in so called "detached HEAD" state (HEAD points directly to commit, and is not symbolic reference to some local branch). If you made some commits on this unnamed branch, you can always create local branch off current commit:
git checkout -b test HEAD
A more modern approach as suggested in the comments:
@Dennis:
git checkout <non-branch>
, for examplegit checkout origin/test
results in detached HEAD / unnamed branch, whilegit checkout test
orgit checkout -b test origin/test
results in local branchtest
(with remote-tracking branchorigin/test
as upstream) – Jakub Narębski Jan 9 '14 at 8:17
emphasis on git checkout origin/test
Answered 2023-09-20 19:53:47
error: pathspec 'branch_name' did not match any file(s) known to git.
then you should do a git fetch first. - anyone git checkout <non-branch>
, for example git checkout origin/test
results in detached HEAD / unnamed branch, while git checkout test
or git checkout -b test origin/test
results in local branch test
(with remote-tracking branch origin/test
as upstream) - anyone In this case, you probably want to create a local test
branch which is tracking the remote test
branch:
$ git branch test origin/test
In earlier versions of git
, you needed an explicit --track
option, but that is the default now when you are branching off a remote branch.
To create the local branch and switch to it, use:
$ git checkout -b test origin/test
Answered 2023-09-20 19:53:47
bash git checkout -b test/origin/test
suggestion above, you made want to precede it with a bash git fetch upstream
to insure that your local repository knows the remote branch test
is there. Otherwise, thanks, everything works as advertised. - anyone While the first and selected answer is technically correct, there's the possibility you have not yet retrieved all objects and refs from the remote repository. If that is the case, you'll receive the following error:
$ git checkout -b remote_branch origin/remote_branch
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/remote_branch' which can not be resolved as commit?
If you receive this message, you must first do a git fetch origin
where origin
is the name of the remote repository prior to running git checkout remote_branch
. Here's a full example with responses:
$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
e6ef1e0..5029161 develop -> origin/develop
* [new branch] demo -> origin/demo
d80f8d7..359eab0 master -> origin/master
$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'
As you can see, running git fetch origin
retrieved any remote branches we were not yet setup to track on our local machine. From there, since we now have a ref to the remote branch, we can simply run git checkout remote_branch
and we'll gain the benefits of remote tracking.
Answered 2023-09-20 19:53:47
I tried the above solution, but it didn't work. Try this, it works:
git fetch origin 'remote_branch':'local_branch_name'
This will fetch the remote branch and create a new local branch (if not exists already) with name local_branch_name
and track the remote one in it.
Answered 2023-09-20 19:53:47
This will DWIM for a remote not named origin (documentation):
$ git checkout -t remote_name/remote_branch
To add a new remote, you will need to do the following first:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
The first tells Git the remote exists, the second gets the commits.
Answered 2023-09-20 19:53:47
Use:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
Other answers do not work with modern Git in my benign case. You might need to pull first if the remote branch is new, but I haven't checked that case.
Answered 2023-09-20 19:53:47
You basically see the branch, but you don't have a local copy yet!...
You need to fetch
the branch...
You can simply fetch and then checkout to the branch, use the one line command below to do that:
git fetch && git checkout test
I also created the image below for you to share the differences, look at how fetch
works and also how it's different to pull
:
Answered 2023-09-20 19:53:47
To clone a Git repository, do:
git clone <either ssh url /http url>
The above command checks out all of the branches, but only the master
branch will be initialized. If you want to checkout the other branches, do:
git checkout -t origin/future_branch (for example)
This command checks out the remote branch, and your local branch name will be same as the remote branch.
If you want to override your local branch name on checkout:
git checkout -t -b enhancement origin/future_branch
Now your local branch name is enhancement
, but your remote branch name is future_branch
.
Answered 2023-09-20 19:53:47
I always do:
git fetch origin && git checkout --track origin/branch_name
Answered 2023-09-20 19:53:47
You can try
git fetch remote
git checkout --track -b local_branch_name origin/branch_name
or
git fetch
git checkout -b local_branch_name origin/branch_name
Answered 2023-09-20 19:53:47
--track
is no longer needed in newer versions of git, because it's set by default, as explained in this earlier answer. - anyone git checkout -b local_branch_name origin/branch_name
- anyone I was stuck in a situation seeing error: pathspec 'desired-branch' did not match any file(s) known to git.
for all of the suggestions above. I'm on Git version 1.8.3.1.
So this worked for me:
git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD
The explanation behind is that I've noticed that when fetching the remote branch, it was fetched to FETCH_HEAD:
git fetch origin desired-branch
From github.com:MYTEAM/my-repo
* branch desired-branch -> FETCH_HEAD
Answered 2023-09-20 19:53:47
First, you need to do:
git fetch
# If you don't know about branch name
git fetch origin branch_name
Second, you can check out remote branch into your local by:
git checkout -b branch_name origin/branch_name
-b
will create new branch in specified name from your selected remote branch.
Answered 2023-09-20 19:53:47
I use the following command:
git checkout --track origin/other_remote_branch
Answered 2023-09-20 19:53:47
Commands
git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>
are equal to
git fetch --all
and then
git checkout -b fixes_for_dev origin/development
Both will create a latest fixes_for_dev
from development
Answered 2023-09-20 19:53:47
Simply run git checkout
with the name of the remote branch. Git will automatically create a local branch that tracks the remote one:
git fetch
git checkout test
However, if that branch name is found in more than one remote, this won't work as Git doesn't know which to use. In that case you can use either:
git checkout --track origin/test
or
git checkout -b test origin/test
In 2.19, Git learned the checkout.defaultRemote
configuration, which specifies a remote to default to when resolving such an ambiguity.
Answered 2023-09-20 19:53:47
The git remote show <origin name>
command will list all branches (including un-tracked branches). Then you can find the remote branch name that you need to fetch.
Example:
git remote show origin
Use these steps to fetch remote branches:
git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)
Example:
git fetch origin test:test
git checkout test
Answered 2023-09-20 19:53:47
None of these answers worked for me. This worked:
git checkout -b feature/branch remotes/origin/feature/branch
Answered 2023-09-20 19:53:47
If the branch is on something other than the origin
remote I like to do the following:
$ git fetch
$ git checkout -b second/next upstream/next
This will checkout the next
branch on the upstream
remote in to a local branch called second/next
. Which means if you already have a local branch named next it will not conflict.
$ git branch -a
* second/next
remotes/origin/next
remotes/upstream/next
Answered 2023-09-20 19:53:47
There are many alternatives, for example:
Alternative 1:
git fetch && git checkout test
It's the simplest way.
Alternative 2:
git fetch
git checkout test
It's the same, but in two steps.
Answered 2023-09-20 19:53:47
git fetch && git checkout your-branch-name
Answered 2023-09-20 19:53:47
git fetch
fetches all information from remove and it also fetches the latest branches available. Then git checkout your-branch-name
checkouts the branch - anyone git branch -r
says the object name is invalid, because that branch name isn't in Git's local branch list. Update your local branch list from origin with:
git remote update
And then try checking out your remote branch again.
This worked for me.
I believe git fetch
pulls in all remote branches, which is not what the original poster wanted.
Answered 2023-09-20 19:53:47
git remote update
will also fetch all remote branches. - anyone TL;DR
Using git switch
rather than git checkout
. More details are on this page.
I think the answer is obsolete. Git split some functions of checkout
to switch
and restore
now.
The following is my summary:
If you want to update something for a remote branch, you should create a local branch to "track" the remote branch. You can update anything you want in local and finally push to remote. If you check out to the remote branch directly after cloning your repository, you may see the "detached HEAD" status and the following message from Git:
Note: switching to 'origin/asd'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at d3e1083 Update a
So how can we create a local branch to track a remote branch?
To create a local branch to track a remote branch, you can use git checkout <remote branch name>
or git switch <remote branch name>
. If you have a file or folder has same name as your remote branch name, git checkout
would output some error message, but git switch
can work normally!
Example:
See all branches, and we want to create a local branch to track the remote branch remotes/origin/asd
, and we also have the file name asd
:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/asd
remotes/origin/ereres
remotes/origin/master
remotes/origin/zxc
$ ls
a asd
The filename is same as remote branch, and Git should output some error messages if we are using the git checkout
command to create a local branch to track a remote branch
$ git checkout asd
fatal: 'asd' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
It works if we are using git switch
!
$ git switch ereres
Branch 'ereres' set up to track remote branch 'ereres' from 'origin'.
Switched to a new branch 'ereres'
$ git branch -vv
* ereres 3895036 [origin/ereres] Update a
master f9e24a9 [origin/master] Merge branch 'master' of
Answered 2023-09-20 19:53:47
Fetch from the remote and checkout the branch.
git fetch <remote_name> && git checkout <branch_name>
E.g.:
git fetch origin && git checkout feature/XYZ-1234-Add-alerts
Answered 2023-09-20 19:53:47
Other guys and gals give the solutions, but maybe I can tell you why.
git checkout test which does nothing
Does nothing
doesn't equal doesn't work
, so I guess when you type 'git checkout test' in your terminal and press enter key, no message appears and no error occurs. Am I right?
If the answer is 'yes', I can tell you the cause.
The cause is that there is a file (or folder) named 'test' in your work tree.
When git checkout xxx
parsed,
xxx
as a branch name at first, but there isn't any branch named test.xxx
is a path, and fortunately (or unfortunately), there is a file named test. So git checkout xxx
means discard any modification in xxx
file.xxx
either, then Git will try to create the xxx
according to some rules. One of the rules is create a branch named xxx
if remotes/origin/xxx
exists.Answered 2023-09-20 19:53:47
To get newly created branches
git fetch
To switch into another branch
git checkout BranchName
Answered 2023-09-20 19:53:47
git checkout -b "Branch_name" [ B means Create local branch]
git branch --all
git checkout -b "Your Branch name"
git branch
git pull origin "Your Branch name"
successfully checkout from the master branch to dev branch
Answered 2023-09-20 19:53:47
To get all remote branches, use this:
git fetch --all
Then check out to the branch:
git checkout test
Answered 2023-09-20 19:53:47
It seems to my that no one suggested the simplest way (or maybe I'm too dumb to think this is "a way"). But anyway, try this:
git pull origin remoteBranchName
git switch remoteBranchName
This worked for me in the same case (a branch created on the remote after my last pull request).
Answered 2023-09-20 19:53:47
For us, it seems the remote.origin.fetch
configuration gave a problem. Therefore, we could not see any other remote branches than master
, so git fetch [--all]
did not help. Neither git checkout mybranch
nor git checkout -b mybranch --track origin/mybranch
did work, although it certainly was at remote.
The previous configuration only allowed master
to be fetched:
$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master
Fix it by using *
and fetch the new information from origin:
$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
$ git fetch
...
* [new branch] ...
...
Now we could git checkout
the remote branch locally.
I don't have any idea how this configuration ended up in our local repository.
Answered 2023-09-20 19:53:47