如何签出远程 Git 分支?

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

现在,我正在尝试签出远程test分支。

我试过了:

  • git checkout test ,什么都不做

  • git checkout origin/test给出* (no branch) 。这令人困惑。我怎么会处于 “无分支” 状态?

如何签出远程 Git 分支?

答案

更新资料

雅库布的答案实际上对此有所改善。使用≥1.6.6 的 Git 版本,并且只有一个遥控器,您可以执行以下操作:

git fetch
git checkout test

正如用户 masukomi 在评论中指出的那样,如果您有多个遥控器,则git checkout test在现代 git 中将不起作用。在这种情况下使用

git checkout -b test <name of remote>/test

或速记

git checkout -t <name of remote>/test

旧答案

在开始在远程分支上进行本地工作之前,您需要按照下面的答案中的说明获取它。

要获取分支,您只需要:

git fetch origin

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

git branch -v -a

有了远程分支之后,您现在需要检出您感兴趣的分支,并为您提供本地工作副本:

git checkout -b test origin/test

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

git checkout test

(请注意,执行神奇的DWIM -mery 并为您创建本地分支 “test” 是 “测试” 而非“起源 / 测试”),上游将是远程跟踪分支“起源 / 测试”。


git branch输出中的* (no branch)表示您处于未命名分支,处于所谓的 “分离的 HEAD” 状态(HEAD 指向直接提交,而不是对某些本地分支的符号引用)。如果您在此未命名分支上进行了一些提交,则始终可以从当前提交创建本地分支:

git checkout -b test HEAD

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

$ git branch test origin/test

git早期版本中,您需要一个显式的--track选项,但这是从远程分支分支时的默认选项。

接受的答案对您不起作用?

尽管第一个选择的答案在技术上是正确的 ,但有可能您尚未从远程存储库中检索所有对象和引用。如果是这种情况,您将收到以下错误:

$ git checkout -b remote_branch origin/remote_branch

致命:git checkout:更新路径与切换分支不兼容。
您是否打算签出无法解决为提交的 “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即可获得远程跟踪的好处。

我尝试了上述解决方案,但是没有用。试试这个,它的工作原理:

git fetch origin 'remote_branch':'local_branch_name'

这将获取远程分支并创建一个名为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。如果远程分支是新的,则可能需要先拉,但是我没有检查这种情况。

好的 ,答案很简单... 您基本上可以看到分支,但是您还没有本地副本!...

您需要fetch分支...

您可以简单地提取然后签出到分支,使用下面的一行命令来执行该操作:

git fetch && git checkout test

我还创建了下面的图像供您共享差异,看一下fetch工作原理以及pull的不同之处:

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