首页 文章

如何查看远程Git分支?

提问于
浏览
5645

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

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

我试过了:

  • git checkout test 什么也没做

  • git checkout origin/test 给出 * (no branch) . 这令人困惑 . 我怎么能在"no branch"?

如何查看远程Git分支?

26 回答

  • 417

    你可以试试

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

    要么

    git fetch
    git checkout -b local_branch_name origin/branch_name
    
  • 5

    对于上面提到的所有建议,我都被困在了一个看到 error: pathspec 'desired-branch' did not match any file(s) known to git. 的情况 . 我正在使用git版本1.8.3.1 .

    所以 worked for me

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

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

    $ git fetch origin desired-branch
    From github.com:MYTEAM/my-repo
        * branch            desired-branch -> FETCH_HEAD
    
  • 1132

    Sidenote: 使用现代Git(> = 1.6.6),您可以使用

    git checkout test
    

    (注意它是'test'而不是'origin/test')执行神奇的DWIM -mery并为你创建本地分支'test',其上游将是远程跟踪分支'origin/test' .


    git branch 输出中的 * (no branch) 意味着您处于未命名的分支,即所谓的"detached HEAD"状态(HEAD直接指向提交,而不是对某些本地分支的符号引用) . 如果您在此未命名分支上进行了一些提交,则始终可以创建当前分支关闭当前提交:

    git checkout -b test HEAD
    
  • 7832

    使用:

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

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

  • 0

    首先,你需要做:

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

    git fetch origin branch_name
    

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

    git checkout -b branch_name origin/branch_name
    

    -b 将从您选择的远程分支创建指定名称的新分支 .

  • 199

    如果分支是在 origin 遥控器以外的其他地方我喜欢做以下事情:

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

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

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

    OK ,答案很简单......你基本上看到了分支,但你还没有本地副本!...

    你需要 fetch 分支......

    您可以简单地获取然后结帐到分支,使用下面的一行命令来执行此操作:

    git fetch && git checkout test
    

    我还创建了下面的图像供您分享差异,看看 fetch 如何工作以及它与 pull 的不同之处:

  • 4

    获取原点并签出分支 .

    git fetch origin && git checkout branch_name
    
  • 3

    To get newly created branches

    git fetch
    

    To switch into another branch

    git checkout BranchName
    
  • 15

    您可以使用以下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 ;
    
  • 60

    更新

    Jakub's answer实际上改善了这一点 . 如果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
    
  • 103

    命令

    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 创建 latest fixes_for_dev

  • 94

    接受的答案不适合你?

    虽然第一个和选定的答案在技术上是正确的,但_207268会收到以下错误:

    $ 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 ,我们将获得远程跟踪的好处 .

  • 47

    其他人和女孩给出了解决方案,但也许我可以告诉你为什么 .

    git checkout test,什么都不做

    Does nothing 不等于 doesn't work ,所以我猜你在终端输入'git checkout test'并按回车键时,不会显示任何消息,也不会出现错误 . 我对吗?

    如果答案是'是',我可以告诉你原因 .

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

    解析 git checkout xxx

    • Git最初在 xxx 上看起来是一个分支名称,但是没有任何名为test的分支 .

    • 然后Git认为 xxx 是一条路径,幸运的是(或不幸的是),有一个名为的文件测试 . 所以 git checkout xxx 意味着放弃 xxx 文件中的任何修改 .

    • 如果没有名为 xxx 的文件,那么Git将尝试根据某些规则创建 xxx . 如果 remotes/origin/xxx 存在,则其中一个规则是创建名为 xxx 的分支 .

  • 30

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

    $ git branch test origin/test
    

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

  • 27

    只需使用远程分支的名称运行 git checkout 即可 . Git将automatically create跟踪远程分支的本地分支:

    git fetch
    git checkout test
    

    但是,如果在多个远程中找到该分支名称,则无法使用,因为Git不知道使用哪个 . 在这种情况下,您可以使用:

    git checkout --track origin/test
    

    要么

    git checkout -b test origin/test
    

    2.19中,Git学习了checkout.defaultRemote配置,它在解决这种歧义时指定了默认的远程 .

  • 23

    这些答案都不适合我 . 这工作:

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

  • 14

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

    例如,我试图检出一个名为 #9773 的远程分支,但命令无法正常工作,如下图所示:

    出于某种原因,我想知道尖锐符号(#)是否与它有关,然后我尝试用单引号包围分支名称,比如 '#9773' rathen而不仅仅是 #9773 ,它运行正常 .

    $ git checkout -b '#9773' origin/'#9773'
    
  • 10

    请按照命令创建一个空文件夹 . 输入并使用此命令:

    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'
    
  • 8

    我使用以下命令:

    git checkout --track origin/other_remote_branch
    
  • 6

    git fetch && git checkout your-branch-name

  • 2

    我尝试了上面的解决方案,但它没有用 . 试试这个,它有效:

    git fetch origin 'remote_branch':'local_branch_name'
    

    这将获取远程分支并创建一个名为 local_branch_name 的新本地分支(如果尚不存在)并跟踪其中的远程分支 .

  • 22

    git branch -r 表示对象名称无效,因为该分支名称不是't in Git'的本地分支列表 . 使用以下命令从源更新本地分支列表:

    git remote update
    

    然后尝试再次检查您的远程分支 .

    这对我有用 .

    我相信 git fetch 拉入所有远程分支,这不是原始海报想要的 .

  • 24

    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
    
  • 1

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

    Documentation

  • 11

    对于未命名的远程源(documentation),这将是DWIM

    $ git checkout -t remote_name/remote_branch
    

    要添加新遥控器,您需要先执行以下操作:

    $ git remote add remote_name location_of_remote
    $ git fetch remote_name
    

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

相关问题