如何查看远程Git分支?

有人用git push origin test将一个名为test的分支git push origin test送到共享库。 我可以看到与git branch -r

现在我试图检查远程test分支。

我试过了:

  • git checkout test哪个没做

  • git checkout origin/test* (no branch) 。 这是令人困惑的。 我怎么能在“没有分支”?

如何查看远程Git分支?

更新

Jakub的回答实际上改善了这一点。 使用Git版本≥1.6.6时,您可以执行以下操作:

 git fetch git checkout test 

(用户masukomi指出,如果你有多个远程git checkout test将不能在现代git中工作,在这种情况下使用git checkout -b test <name of remote>/test )。

老答案

在远程分支上本地开始工作之前,您需要按照以下答案中的提示取出它。

要获取分支,您只需要:

 git fetch origin 

这将为您获取所有的远程分支。 您可以看到可用于结帐的分行:

 git branch -v -a 

在远程分支机构,你现在需要检查你感兴趣的分支,给你一个本地工作副本:

 git checkout -b test origin/test 

旁注:用现代的Git(> = 1.6.6 ),你可以使用

 git checkout test 

(注意,它是“testing”而不是“起源/testing”)来执行神奇的DWIM -mery并为您创build本地分支“testing”,上游将是远程跟踪分支的“起源/testing”。


git branch输出中的* (no branch)意味着你在一个未命名的分支上,在所谓的“detached HEAD”状态(HEAD直接指向提交,而不是对某个本地分支的符号引用)。 如果你在这个未命名的分支上做了一些提交,你总是可以创build本地分支closures当前提交:

 git checkout -b test HEAD 

在这种情况下,您可能需要创build一个本地test分支,用于跟踪远程test分支:

 $ git branch test origin/test 

在早期版本的git ,你需要一个明确的--track选项,但是当你分支一个远程分支时,这是默认的。

接受的答案不适合你?

虽然第一个和所选的答案在技术上是正确的 ,但是您还没有从远程存储库中检索到所有对象和引用。 如果是这样,您将收到以下错误:

 $ git checkout -b remote_branch origin/remote_branch 

致命的:git checkout:更新path与切换分支不兼容。
您是否打算签出无法parsing为“提交”的“origin / remote_branch”?

如果您收到此消息,则必须先执行git fetch origin ,其中origin是远程存储库的名称,然后再运行git checkout remote_branch 。 以下是一个完整的例子:

 $ 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' 

正如你所看到的,运行git fetch origin检索了我们还没有设置在本地机器上跟踪的远程分支。 从那里,因为我们现在有一个远程分支的引用,我们可以简单地运行git checkout remote_branch ,我们将获得远程跟踪的好处。

我试过上面的解决scheme,但没有奏效。 试试这个,它的工作原理:

 git fetch origin 'remote_branch':'local_branch_name' 

这将获取远程分支,并创build一个名称为local_branch_name的新本地分支(如果尚未存在),并跟踪远程分支。

这将DWIM的远程非命名来源( 文档 ):

 $ git checkout -t remote_name/remote_branch 

要添加新的远程,您需要首先执行以下操作:

 $ git remote add remote_name location_of_remote $ git fetch remote_name 

第一个告诉Git远程存在,第二个获取提交。

使用:

 git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME> 

其他答案不适用于我的良性情况下的现代Git。 如果远程分支是新的,你可能需要先拉,但是我没有检查过这种情况。

要克隆一个Git仓库,请执行:

 git clone <either ssh url /http url> 

上面的命令检出所有分支,但只有master分支将被初始化。 如果您想结账其他分行,请执行以下操作:

 git checkout -t origin/future_branch (for example) 

这个命令检出远程分支,你的本地分支名称将和远程分支一样。

如果您想在结帐时覆盖您的本地分行名称:

 git checkout -t -b enhancement origin/future_branch 

现在您的本地分支名称是enhancement ,但您的远程分支名称是future_branch

文档

你可以试试

 git fetch remote git checkout --track -b local_branch_name origin/branch_name 

要么

 git fetch git checkout -b local_branch_name origin/branch_name 

命令

 git fetch --all git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name> 

等于

  git fetch --all 

接着

  git checkout -b fixes_for_dev origin/development 

两者都将从development创build一个latest fixes_for_dev

如果分支是在远程以外的东西,我喜欢做以下事情:

 $ git fetch $ git checkout -b second/next upstream/next 

这将检查upstream远程的next分支到一个名为second/next的本地分支。 这意味着如果你已经有一个名为next的本地分支,它不会发生冲突。

 $ git branch -a * second/next remotes/origin/next remotes/upstream/next 

首先,你需要做的是:

git fetch #如果你不知道分支名称

 git fetch origin branch_name 

其次,您可以通过以下方式检查远程分支到您的本地:

 git checkout -b branch_name origin/branch_name 

-b将从您select的远程分支中以指定名称创build新的分支。

git fetch && git checkout your-branch-name

git branch -r说对象名称是无效的,因为该分支名称不在Git的本地分支列表中。 从原始更新您的本地分支名单:

 git remote update 

然后再次尝试检出您的远程分支。

这对我有效。

我相信git fetch拉动所有的远程分支,这不是原来的海报想要的。

我使用以下命令:

git checkout --track origin/other_remote_branch

好的 ,答案很简单…你基本上看到这个分支,但是你没有一个本地副本…

你需要fetch分行…

您可以简单地获取然后签出到分支,使用下面的一行命令来做到这一点:

 git fetch && git checkout test 

我也在下面为你创build了一个图像来分享它们之间的差异,看看如何fetch工作,以及如何fetch不同的结果:

git fetch

请按照该命令创build一个空文件夹。 input并使用这个命令:

 saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url Cloning into 'iPhoneV1'... remote: Counting objects: 34230, done. remote: Compressing objects: 100% (24028/24028), done. remote: Total 34230 (delta 22212), reused 15340 (delta 9324) Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done. Resolving deltas: 100% (22212/22212), done. Checking connectivity... done. saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/ saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin. Switched to a new branch '1_4_0_content_discovery' 

另一个人给出的解决scheme,但也许我可以告诉你为什么。

git checkouttesting哪个没做

Does nothing都不等于doesn't work ,所以我想当你在terminal上input“git checkout test”,按回车键,就不会出现消息,也不会出错。 我对吗?

如果答案是肯定的,我可以告诉你原因。

原因是工作树中有一个名为“test”的文件(或文件夹)。

当parsinggit checkout xxx

  1. git首先将xxx看作是一个brach名称,但是没有任何名为test的分支。
  2. 那么git认为xxx是一条path,幸运的是(或不幸),有一个名为test的文件。 所以git checkout xxx表示丢弃xxx文件中的任何修改
  3. 如果没有名为xxx文件,那么git会根据一些规则尝试创buildxxx 。 其中一个规则是创build一个名为xxx的分支,如果remotes/origin/xxx存在的话。

你可以开始跟踪所有的远程分支跟随bash脚本:

 #!/bin/bash git fetch --all for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'` do git branch -f --track "$branch" "origin/$branch" done 

这里也是单行版本:

 git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;