题 如何查看远程Git分支?


有人推了一个叫做的分支 test 同 git push origin test 到共享存储库。我可以看到分支 git branch -r

现在我正试着看看遥控器 test 科。

我试过了:

  • git checkout test 什么也没做

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

如何查看远程Git分支?


5316
2017-11-23 14:23


起源


@inger但它不包括重命名新本地分支的可能性(如果你想 - 稍后设置 - 上游并保持命名一致性) - fachexot
我认为这个帖子没有用。似乎没有什么工作,原始问题似乎已经在许多答案中丢失了。我已经阅读了每一个字,尝试了下面的所有内容,并且不知道如何做OP想要做的事情。 - Tony Ennis
Git命令一开始并不直观,将最新版本引入的更改添加到组合中,您就拥有了这个页面...... - Christophe Roussy
我觉得我正在服用疯狂的药片。我正试图从一个分支机构结账 upstream, 不只是 origin,并且每个推荐的答案都没有做任何远程帮助(双关语)。 编辑  - 对不起,前两个答案中包含的众多建议都没用;第3个(git branch test origin/test)是有效的。很高兴前2名的票数是20倍...... - dwanderson
也许你的工作树中有一个名为'test'的文件,请参阅 stackoverflow.com/a/45006389/792416 细节。 - oldman


答案:


更新

雅各布的回答 实际上改善了这一点。使用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

7366
2017-11-23 14:26



为了扩展这个:git不允许你在别人的分支上工作。你只能靠自己工作。因此,如果您想要添加到其他人的分支,您需要创建自己的该分支的“副本”,这就是上面的命令所做的(好吧,它创建您的分支并检查它)。 - Dan Moulding
如果它是您可能需要的新远程分支 git fetch 在做这个之前让git知道 origin/test - Neil Sarkar
......你会这样做的 git fetch origin test - Andrew
错误:“git checkout:更新路径与切换分支不兼容。您打算结账吗? origin/test 哪个不能解决为提交?“ - Xeoncross
git checkout test不会在现代git中工作 如果您有多个具有相同分支名称的遥控器。它无法知道使用哪一个。 - masukomi


边注: 用现代的Git(> = 1.6.6),你可以使用

git checkout test

(注意它是'测试'而不是'起源/测试')来执行魔法 DWIM-mery并为您创建本地分支'test',其上游将是远程跟踪分支'origin / test'。


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

git checkout -b test HEAD

1092
2017-11-24 00:17



不足为奇,但是这个版本已经在过去几年中发布了 - 知道这个语法可以节省很多时间,因为还有很多旧的文档和评论线程浮出水面,这表明这样做的旧方法。 - Curtis
“现代git” - 记录,(大约)你指的是什么版本?有时我们必须处理运行较旧发行版的系统。 - Craig McQueen
在这种背景下,“现代git”是 git 1.6.6 - Bobby Norton
@aidan如果你得到了回应 error: pathspec 'branch_name' did not match any file(s) known to git. 那么你应该先做一个git fetch。 - Dennis
使用git版本1.8.3.msysgit.0,这对我不起作用 - 与git已知的任何文件都不匹配 - 我做了很多git抓取 - PandaWood


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

$ git branch test origin/test

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


478
2017-11-23 14:27



这将创建一个本地分支而不切换到它。 - Alex.Designworks
虽然我变得致命:不明确的对象名称:'origin / dev' - 其中一个分支'dev'在起源上肯定存在 - 但我不小心在我的机器上创建了一个名为“origin / dev”的分支(在我以前的愚蠢尝试中)为了做到这一点,毫无疑问)...哎哟 - PandaWood
这给了我错误错误:无法推送一些引用提示:更新被拒绝,因为推送的分支提示在其远程提示后面:对应。检查此分支并合并远程更改提示:(例如'git pull')再次按下之前。提示:有关详细信息,请参阅'git push --help'中的'关于快进的说明'。 - pal4life
git branch test 适合我 - Isaac Pak


接受的答案 不适合你?

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

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


395
2017-12-07 20:52



如果你在本地有一个单独的分支,我会添加一个注释:确保你使用'git remote add origin [the_path_to_your_repo / repo_name.git]'将它与远程仓库相关联。然后使用'git fetch origin',其中'origin'表示您与之关联的原始存储库。 - elliotrock
git checkout -b newbranch 也适用于基于当前分支的一步创建和结帐新分支。 - Linus
我认为这是最新的(它保持$ @!变化!)。 Git 2.5.5我找到了实际的唯一方法 看到 远程分支是 git ls-remote 而实际使用它的唯一方法是 git checkout -b [branch] --track [remote/branch]......就是这样 后  git pull [remote] [branch] 工作。即,它实际上拉了整个分支,但仍然不会列出它。 - delicateLatticeworkFever
当这个答案也不起作用时,请参阅 这个。 - eis


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

git fetch origin 'remote_branch':'local_branch_name'

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


176
2017-10-18 05:55



当git fetch origin或git remote update都没有创建本地分支时,这对我有用。我不知道为什么。 - Godsmith
这是完成我所需要的最直接的方法,即使用远程分支(而不是主分支)来创建新分支。 - Roralee
无缝工作,尤其是从具有多个分支的远程克隆单个分支时。 - Alex C
这也适合我,在那里接受的答案和其他高投票没有。我的git版本是2.5.0 - pdepmcp
有没有人知道为什么当其他一切都没有时这是有效的? (我在git 2.13.0) - Nathan Arthur


这会 DWIM 对于未命名的遥控器(文件):

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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


100
2018-04-27 22:37





使用:

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

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


89
2018-02-21 10:58



你是否意识到这是这个的摘录 回答 - Thomas Ayoub
现在看,它们确实重叠。只有我的是简洁的,并告诉你该做什么而不是讲故事。我认为它可能更有用,特别是对于现在的git版本。如果您认为这是一个糟糕的答案,您可以进行投票。 - matanster


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

文档


45
2018-01-21 10:04



git clone <ssh url / http url> - 对我来说非常适合 - Kmeixner
是的,你是对的。感谢您的信息,我会尽快更新@warvariuc - Madhan Ayyasamy
如果遥控器没有 master,这是行不通的。 - polkovnikov.ph


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

你需要 fetch 分支...

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

git fetch && git checkout test

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

git fetch


42
2017-09-05 14:20



很棒的图片,谢谢 - developer
如果没有本地分支,则不起作用 test - Dmitri Zaitsev
@DmitriZaitsev是的,它会工作,如果远程分支在那里,你做取,你会得到本地分支... git fetch && git checkout test ..这样可行,除非没有远程分支,但是问题说那里已经有一个偏远的分支...... - Alireza
我看到问题的方式, test 看起来像一个新的分支,所以它不可能在本地出现。否则你可以用单一的方式拉它 git pull 命令。 - Dmitri Zaitsev
@DmitriZaitsev,是的,这就是为什么我说git fetch,检查刚刚创建的远程分支,pull可以带来其他不需要的东西,但是如果你已经拥有本地的repo,fetch使所有分支都可用... - Alireza