代码之家  ›  专栏  ›  技术社区  ›  Juri Glass

如何签出远程Git分支?

  •  5892
  • Juri Glass  · 技术社区  · 16 年前

    有人推了一个叫做 test git push origin test 到共享存储库。我能看见那根树枝 git branch -r .

    现在我想检查一下遥控器 测试 分支机构。

    我试过:

    • git checkout test

    • git checkout origin/test 给予 * (no branch) . 这令人困惑。我怎么能在“无分支”上?

    如何签出远程Git分支?

    26 回复  |  直到 9 年前
        1
  •  10120
  •   Farrukh Malik    5 年前

    用一个遥控器

    Jakub's answer 实际上在这方面有所改进。使用Git版本1.6.6,仅使用一个遥控器,您可以执行以下操作:

    git fetch
    git checkout test
    

    正如用户masukomi在评论中指出的, git checkout test

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

    还是速记

    git checkout -t <name of remote>/test
    

    与>1遥控器

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

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

    git fetch origin
    

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

    git branch -v -a
    

    有了远程分支机构,您现在需要检查您感兴趣的分支机构,并提供一份本地工作副本:

    git checkout -b test origin/test
    

    enter image description here

        2
  •  1351
  •   Paul    6 年前

    旁注: 1.6.6 ),您可以使用

    git checkout test
    

    (请注意,这是“测试”而不是“起源/测试”)来执行魔术 DWIM


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

    git checkout -b test HEAD
    

    (作者)**

    @丹尼斯: git checkout <non-branch> git checkout origin/test git checkout test git checkout -b test origin/test 分支 test origin/test 作为 上游 ) Jakub Narbski 2014年1月9日8:17

    强调 git签出源/测试

        3
  •  605
  •   ndim    10 年前

    在这种情况下,您可能需要创建一个本地 test 测试 分支机构:

    $ git branch test origin/test
    

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

        4
  •  508
  •   Community Mohan Dere    9 年前

    Accepted answer 不为你工作?

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

    $ git checkout -b remote_branch origin/remote_branch
    

    致命:git签出:更新路径与切换分支不兼容。
    您是否打算签出无法解析为提交的“源/远程分支”?

    如果您收到此消息,必须首先执行以下操作: 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获取源 检索到我们尚未设置在本地计算机上跟踪的任何远程分支。从那里,因为我们现在有了远程分支的ref,所以我们可以简单地运行 git签出远程分支 我们将获得远程跟踪的好处。

        5
  •  305
  •   Sahil kalra    11 年前

    我尝试了上述解决方案,但没有成功。试试这个,它可以工作:

    git fetch origin 'remote_branch':'local_branch_name'
    

    local_branch_name

        6
  •  111
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

    DWIM 对于未命名的远程源( documentation

    $ git checkout -t remote_name/remote_branch
    

    $ git remote add remote_name location_of_remote
    $ git fetch remote_name
    

        7
  •  110
  •   Peter Mortensen Pieter Jan Bonestroo    10 年前

    使用:

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

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

        8
  •  105
  •   Noel Yap    5 年前

    您基本上看到了分支,但您还没有本地副本!。。。

    fetch 分支机构。。。

    git fetch && git checkout test
    

    我还创建了下面的图片供大家分享差异,看看如何 以及它与 pull :

    git fetch

        9
  •  69
  •   Ondrej Nikhil Agrawal    5 年前

    要克隆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 .

        10
  •  44
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

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

    git fetch
    git checkout -b local_branch_name origin/branch_name
    
        11
  •  36
  •   Peter Mortensen Pieter Jan Bonestroo    9 年前

    git fetch #如果您不知道分支机构名称

    git fetch origin branch_name
    

    其次,您可以通过以下方式将远程分支签出到本地分支:

    git checkout -b branch_name origin/branch_name
    

    -b

        12
  •  32
  •   Peter Mortensen Pieter Jan Bonestroo    8 年前

    我使用以下命令:

    git checkout --track origin/other_remote_branch
    
        13
  •  28
  •   madhead    10 年前

    命令

    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
    

    两者都将创造一个 latest fixes_for_dev 从…起 development

        14
  •  27
  •   Eugene Yarmash    6 年前

    git checkout 使用远程分支的名称。吉特会 automatically create 跟踪远程分支的本地分支:

    git fetch
    git checkout test
    

    git checkout --track origin/test
    

    git checkout -b test origin/test
    

    在里面 2.19 ,Git学会了 checkout.defaultRemote 配置,指定在解决此类歧义时默认使用的远程。

        15
  •  25
  •   prusswan    13 年前

    如果分支位于 origin

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

    这将签出 next 分支机构 upstream 远程输入到名为 second/next . 这意味着,如果您已经有一个名为next的本地分支,则不会发生冲突。

    $ git branch -a
    * second/next
      remotes/origin/next
      remotes/upstream/next
    
        16
  •  23
  •   brianyang    8 年前

    这些答案都不适合我。这起到了作用:

    git checkout -b feature/branch remotes/origin/feature/branch

        17
  •  23
  •   alisa    7 年前

    error: pathspec 'desired-branch' did not match any file(s) known to git. 对于以上所有建议。我使用的是git版本1.8.3.1。

    为我工作 :

    git fetch origin desired-branch
    git checkout -b desired-branch FETCH_HEAD
    

    背后的解释是,我注意到,在获取远程分支时,它被获取以获取_HEAD:

    $ git fetch origin desired-branch
    From github.com:MYTEAM/my-repo
        * branch            desired-branch -> FETCH_HEAD
    
        18
  •  21
  •   Inder Kumar Rathore user4622654    12 年前

    git fetch && git checkout your-branch-name

        19
  •  18
  •   Peter Mortensen Pieter Jan Bonestroo    8 年前

    git remote show <origin name> 命令将列出所有分支(包括未跟踪的分支)。然后,您可以找到需要获取的远程分支名称。

    例子:

    $ git remote show origin
    

    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)
    

    $ git fetch origin test:test
    $ git checkout test
    
        20
  •  17
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

    git branch -r 表示对象名称无效,因为该分支名称不在Git的本地分支列表中。使用以下内容从源位置更新本地分支机构列表:

    git remote update
    

    然后再次尝试签出远程分支。

    这对我有用。

    我相信 git fetch 远程分支,这不是原始海报想要的。

        21
  •  15
  •   Pranav    7 年前

    从远程获取并签出分支。

    git fetch <remote_name> && git checkout <branch_name> 
    

    git-fetch-origin&&git签出功能/XYZ-1234-Add-alerts

        22
  •  12
  •   Peter Mortensen Pieter Jan Bonestroo    8 年前

    其他男人和女孩给出了解决方案,但也许我可以告诉你原因。

    git校验测试,它什么也不做

    Does nothing 不等于 doesn't work

    如果答案是“是”,我可以告诉你原因。

    什么时候 git checkout xxx 解析,

    1. xxx
    2. 然后Git想 是一个路径,幸运的是(或不幸的是),有一个名为test的文件。所以 git签出xxx xxx 文件
    3. 如果没有名为 xxx 或者,Git将尝试创建 xxx 如果 remotes/origin/xxx 存在。
        23
  •  12
  •   Community Mohan Dere    8 年前

    获取新创建的分支

    git fetch
    

    切换到另一个分支

    git checkout BranchName
    
        24
  •  12
  •   Keshav Gera    5 年前

    git分支--全部

    吉特分行

    git pull origin“您的分支名称”

    enter image description here

        25
  •  8
  •   Peter Mortensen Pieter Jan Bonestroo    8 年前

    可以使用以下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 ;
    
        26
  •  8
  •   Zahra Badri    6 年前

    要获取所有远程分支,请使用以下命令:

    git fetch --all
    

    git checkout test
    
        27
  •  7
  •   M. Wojcik    5 年前

    git fetch origin && git checkout --track origin/branch_name

        28
  •  7
  •   Craigo    5 年前

    只要运行这两个命令,就可以开始了。

    git checkout <branch-name>
    git pull <remote> <branch-name>
    
        29
  •  6
  •   hzpc-joostk    6 年前

    remote.origin.fetch 配置出了一个问题。因此,我们看不到除此之外的任何其他远程分支 master git fetch [--all] git checkout mybranch 也没有 git checkout -b mybranch --track origin/mybranch

    以前的配置仅允许 要提取:

    $ git config --list | grep fetch
    remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master
    

    通过使用 *

    $ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
    
    $ git fetch
    ...
     * [new branch] ...
    ...
    

    git checkout

    不知道这个配置怎么会出现在我们当地的回购协议中。

        30
  •  6
  •   Ulysses Alves    6 年前

    如果远程分支名称以特殊字符开头,则需要在checkout命令中在其周围使用单引号,否则git将不知道您在谈论哪个分支。

    #9773 但是命令没有正常工作,如下图所示:

    enter image description here

    出于某种原因,我想知道尖锐的符号(#)是否与此有关,然后我尝试用单引号括住分支名称,如 '#9773' 而不仅仅是 #9773

    $ git checkout -b '#9773' origin/'#9773'
    
    推荐文章