如何查看远程Git分支?

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

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

我试过了:

如何查看远程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 checkout -t <name of remote>/test

老答案

在开始在远程分支上本地工作之前,您需要在下面的答案中调用它.

要获取分支,您只需:

git fetch origin

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

git branch -v -a

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

git checkout -b test origin/test
  • 为了扩展这个:git不允许你在别人的分支上工作.你只能靠自己工作.因此,如果您想要添加到其他人的分支,您需要创建自己的该分支的"副本",这就是上面的命令所做的(好吧,它也会创建您的分支并检查它).
  • 如果它是一个新的远程分支,你可能需要在执行此操作之前使用`git fetch`,以便git知道`origin/test`
  • 如果你有多个具有相同分支名称*的遥控器,`git checkout test`将不适用于现代git*.它无法知道使用哪一个.
  • ...你会用`git fetch origin test`来做这件事
  • 错误:"git checkout:更新路径与切换分支不兼容.您是否打算签出无法解析为提交的`origin/test`?"
  • 我得到了同样的错误,我只需要先进行git fetch:[远程分支上的Git checkout不起作用](http://stackoverflow.com/questions/945654/git-checkout-on-a-远程分支不 - 不工作)
  • "如果你有多个遥控器,``git checkout test`将不适用于现代git" - 我有一个遥控器,我仍然需要做`git checkout -b test origin/test` ...
  • @BerislavLopac和@samethebest的`git checkout test`对我来说不是用于多个遥控器但只有一个名为`test`的分支......但我终于意识到我的问题是我有一个名为`test`的文件夹.所以git只是检查了那个文件夹.因此我仍然需要做`git checkout -b test origin/test`
  • 正如Jakub所指出的那样 - 从1.6.6开始,你应该能够使用更短更安全的结账命令.请考虑选择他的答案.
  • @Xeoncross阅读此答案[如何解决](http://stackoverflow.com/a/12320930/18788)
  • 除了说您可以使用fetch命令获取之外,这不会定义"fetch".一个明显的新用户可能会欣赏从哪里到哪里获得什么的一两个字.

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

git checkout test

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


* (no branch)git branch输出意味着你是无名的分支,在所谓的"分离的头"状态(HEAD直接点提交,并不是象征性的参考了一些当地的分支机构).如果您在此未命名分支上进行了一些提交,则始终可以创建当前分支关闭当前提交:

git checkout -b test HEAD
  • 不足为奇,但是这个版本已经在过去几年中发布了 - 知道这个语法可以节省很多时间,因为仍然有很多旧的文档和评论线程浮出水面,这表明这样做的旧方法.
  • "现代git" - 记录,(大约)你指的是什么版本?有时我们必须处理运行较旧发行版的系统.
  • @aidan如果你得到一个像`error:pathspec'branch_name'这样的响应与git已知的任何文件都不匹配那么你应该先进行git fetch.
  • 在这种情况下,"现代git"是[git 1.6.6](https://raw.github.com/git/git/master/Documentation/RelNotes/1.6.6.txt)
  • 使用git版本1.8.3.msysgit.0,这对我不起作用 - 与git已知的任何文件都不匹配 - 我做了很多git抓取
  • @Dennis:`git checkout <non-branch>`,例如`git checkout origin/test`导致分离的HEAD /未命名分支,而`git checkout test`或`git checkout -b test origin/test`导致本地branch`test`(远程跟踪分支`origin/test`为_upstream_)

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

$ git branch test origin/test

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

  • 这将创建一个本地分支而不切换到它.
  • 虽然我变得致命:模糊的对象名称:'origin/dev' - 其中一个分支'dev'在起源上肯定存在 - 但我不小心在我的机器上创建了一个名为"origin/dev"的分支(在我以前的愚蠢尝试中)为了做到这一点,毫无疑问)...哎哟

接受的答案不适合你?

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

$ git checkout -b remote_branch 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 remote add origin [the_path_to_your_repo/repo_name.git]'将它与远程仓库相关联.然后使用'git fetch origin',其中'origin'表示您与之关联的原始存储库.
  • 我认为这是最新的(它保持$ @!变化!).Git 2.5.5我发现实际*看到远程分支的唯一方法是`git ls-remote`,实际使用它的唯一方法是`git checkout -b [branch] --track [remote/branch]` ......那就是*`git pull [remote] [branch]`之后的工作.即,它实际上拉了整个分支,但仍然不会列出它.

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

git fetch origin 'remote_branch':'local_branch_name'

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

  • 当git fetch origin或git remote update都没有创建本地分支时,这对我有用.我不知道为什么.
  • 无缝工作,尤其是从具有多个分支的远程克隆单个分支时.
  • 这也适用于我,在那里接受的答案和其他高投票没有.我的git版本是2.5.0
  • 当其他一切都没有时,有谁知道为什么这个有效?(我在git 2.13.0)
  • 这是完成我所需要的最直接的方法,即使用远程分支(而不是主分支)来创建新分支.
  • 我有一个这种形式的分支:“xx/xx”,这就是我的解决方案。

对于未命名的远程源(文档),这将是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版本.如果您认为这是一个糟糕的答案,您可以进行投票.
  • 你是否意识到这是[答案]的摘录(http://stackoverflow.com/a/13770793/2307070)

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

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

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

git fetch && git checkout test

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


要克隆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中不再需要`--track`,因为它是默认设置的,如[此早期答案](http://stackoverflow.com/a/1783437/456814)中所述.

首先,你需要做:

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

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

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


命令

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_devdevelopment


我使用以下命令:

git checkout --track origin/other_remote_branch
  • 如果您解释为什么以这种方式使用它,这个答案会更有用.即为什么有人应该使用'--track'等......

如果分支在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

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

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


我遇到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

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

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

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

git remote update

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

这对我有用.

我相信git fetch拉在所有远程分支机构,这是不是原来的海报想要什么.

  • 仅供参考,`git remote update`**也将获取所有远程分支**.

git fetch && git checkout your-branch-name


只需git checkout使用远程分支的名称运行即可.Git会自动创建一个跟踪远程分支的本地分支:

git fetch
git checkout test

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

git checkout --track origin/test

要么

git checkout -b test origin/test

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


git checkout -b "Branch_name" [ B 表示创建本地分支]

git 分支 --all

git checkout -b "你的分支名称"

git 分支

git pull origin "你的分支名称"

从 master 分支成功 checkout 到 dev 分支


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

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

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

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

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

git checkout xxx解析,

  1. Git xxx最初看起来是一个分支名称,但是没有任何名为test的分支.
  2. 然后Git认为xxx是一条路径,幸运的是(或者不幸的是),有一个名为test的文件.所以git checkout xxx意味着丢弃xxx文件中的任何修改.
  3. 如果没有名为的文件xxx,那么Git将尝试xxx根据某些规则创建.其中一条规则是创建一个名为xxxif remotes/origin/xxxexists 的分支.

获得新创建的分支机构

git fetch

切换到另一个分支

git checkout BranchName

从远程获取并检出分支。

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

例如:


要获取所有远程分支,请使用:

git fetch --all

然后结帐到分行:

git checkout test

只需运行这两个命令,您就可以开始使用了。

git checkout <branch-name>
git pull <remote> <branch-name>

我经常做:
git fetch origin && git checkout --track origin/branch_name


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

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

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

出于某种原因,我想知道尖符号 (#) 是否与它有关,然后我尝试用单引号将分支名称括起来,例如'#9773'rathen 而不仅仅是#9773,幸运的是它工作正常。

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

对我们来说,似乎remote.origin.fetch配置出了问题。因此,除了 ,我们看不到任何其他远程分支master,因此git fetch [--all]没有帮助。既没有git checkout mybranchgit checkout -b mybranch --track origin/mybranch没有工作,虽然它肯定是在远程。

之前的配置只允许master获取:

$ 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在本地远程分支了。

不知道这个配置是如何在我们的本地仓库中结束的。


我用过那个:

git fetch origin
git reset --hard origin/{branchname}

以上是如何查看远程Git分支?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>