git - Checkout 远程Git的分支

  显示原文与译文双语对照的内容

我正在尝试签出一个远程分支:

有人推了一个名为 test的分支 git push origin test 到一个共享存储库。我可以看到带有 git branch -r的分支。 但是我怎样才能得到这个分支?

  • git checkout test 不执行任何操作

  • git checkout origin/test 做了一些事情,但是 git branch* (no branch) 。 我没有分支?

如何通过公用存储库共享分支?

时间:

更新

回答Jakub实际上提高了。 使用Git版本 1.6.6,你可以执行以下操作:


git fetch
git checkout test

( 用户masukomi指出 git checkout test 在现代git中无法工作如果你有多个遥控器的话。 在本例中,使用 git checkout -b test remote-name/test )

旧答案

在你开始在远程分支上工作之前,你需要在下面的答案中获取它。

要获取分支,只需执行以下操作:

 
git fetch origin

 

这将为你获取所有的远程分支。 可以通过以下方式查看可用的分支:


git branch -v -a

有了远程分支,你现在需要签出你感兴趣的分支,给你一个本地工作副本:


git checkout -b test origin/test

旁注:与现代git(> = 1.6.6 ), 你能够使用

 
git checkout test

 

( 请注意,'测试'不是'原点/测试') 执行魔术 DWIM -mery并为你创建本地分支'测试',其中上游将是remote-tracking分支'原点/测试'。


在输出 git branch* (no branch) 意味着你在不知名的分支,在所谓的"分离头"( 直接提交,并不是对某些局部分支的符号引用) 状态。 如果你在这个未命名的分支上进行了一些提交,你总是可以在当前提交时创建本地分支:


git checkout -b test HEAD

在这种情况下,你可能想要创建一个本地 test 分支跟踪远程 test 分支:


$ git branch test origin/test

在早期版本中,你需要一个显式的--track 选项,但是当你从远程分支分支时,这就是缺省值。

接受的应答无法为你工作?

第一个选择答案在技术上是正确,有可能你还没有检索到所有对象和参考文献从远程存储库。 如果是这种情况,你将收到以下错误:


$ git checkout -b remote_branch origin/remote_branch

致命:git checkout: 更新路径与切换分支不兼容。
你打算签出无法解析为提交的'原点/remote_branch'?

解决方案

如果你收到这条消息,你必须首先做一个 git fetch originorigin 远程存储库之前的名字叫 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,我们将获得远程跟踪的好处。

这将 DWIM 用于一个远程没有命名的( 文档 ):


$ git checkout -t remote_name/remote_branch

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


$ git remote add remote_name location_of_remote
$ git fetch remote_name

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

我尝试了上面的解决方案,但它不起作用。 试试这个,它工作:


git fetch origin 'remote_branch':'local_branch_name'

这将获取远程分支,创建一个新的本地分支( 如果不存在的话) local_branch_name 名称和跟踪远程之一。

要克隆一个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

如果分支位于 origin 遥控器以外的其他地方,我想执行以下操作:


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

这将检验 next 分支在当地 upstream 远程分支称为 second/next 。 这意味着如果你已经有一个名为下一个分支的分支,它将不会冲突。


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

...