远程分支未显示在“ git branch -r”中


139

我一直在推送到远程Bitbucket存储库,最近一位同事将他创建的新分支推送到了相同的存储库。

我正在尝试获取他上传的更改。

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r原始/主

在Bitbucket的Web UI中,我可以看到他创建的分支。我怎样才能做到这一点?

下次尝试:

$ git fetch bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

如果他创建的分支称为new_branch_b,我应该期望看到以下内容吗?

$ git branch -r
origin/master
origin/new_branch_b

第三次尝试:

$ git remote update
Fetching bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

第四次尝试:

[remote "bitbucket"]
url = https://user@bitbucket.org/user/repo.git

我打电话给遥控器,bitbucket而不是打电话给我(至少我记得是这样;我是在不久前设置的)

第五尝试:

我根据kan的回答更新了Bitbucket远程配置:

$ git config -e

[remote "bitbucket"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

对于大多数人来说,它被称为起源:

[remote "origin"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

之后,

$ git remote update

Fetching bitbucket
Password for 'https://user@bitbucket.org':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... 等等。

我认为git fetch origin也可以git remote update


1
很酷,但是使用refs/remotes/bitbucket/*代替可能更有意义refs/remotes/origin/*
2012年

谢谢,适当地提到了命名一致性。不过,将bitbucket更改为原点可能更有意义!公约及所有其他:)
feargal 2012年

1
git fetch origin做这份工作

Answers:


107

remote节还指定了获取规则。您可以在其中添加类似的内容,以从远程获取所有分支:

fetch = +refs/heads/*:refs/remotes/origin/*

(或替换originbitbucket。)

请在这里阅读:10.5 Git内部-Refspec


3
这解决了我在Git中持续进行了数周的分支问题。突然所有git远程更新的东西实际上开始工作了。谢谢!
PålOliver

2
由于某种原因,它看起来像:fetch = +refs/heads/master:refs/remotes/origin/master对我来说。master*固定代替我的问题。
塞巴斯蒂安·布拉斯克

2
如果已将浅表克隆转换为浅表,这将非常有用。
Warpzit

@kan您知道为什么有时会发生这种情况吗?当git clone一个项目发生在我身上。我不记得对本地git做过什么特别的事情。
dotnetCarpenter '17

@dotnetCarpenter不确定...我从未发生过意外。是否有可能clone被打断然后恢复?还是同时有其他回购协议?

218

如果您还没有更新遥控器,请执行以下操作:

$ git remote update
$ git branch -r

1
我在Win上使用GitHub客户端,有时它不更新远程分支。第一行“ git remote update”的工作原理很吸引人。方便&干净
Stefano Buora

git remote update看到UI中的新分支之后。谢谢
Tinkaal Gogoi

它没有帮助。
dKab

我认为我已经成功地获取了分支,但只需要查看它的列即可git branch -r。在git-scm.com/docs/git-branch上显示“选项-r使列出远程跟踪分支,而选项-a同时显示本地和远程分支”。git remote update获取中列出的所有遥控器的所有分支git remote -v
摇滚李

运行此命令后,我得以运行git checkout origin/master,然后从那个分离的头分支到我的主分支git branch master; git checkout master
Dfranc3373,18年

35

如果使用该--depth参数进行克隆,则它将设置为.git/config不获取所有分支,而仅获取master。

您可以简单地省略参数或从以下位置更新配置文件

fetch = +refs/heads/master:refs/remotes/origin/master

fetch = +refs/heads/*:refs/remotes/origin/*

1
谢谢!您的回答实际上很容易解决此问题,并且似乎是解决问题的正确方法。但是您应该添加配置文件在中.git/config,以便人们可以找到它。
dotnetCarpenter

19

我遇到过同样的问题。似乎最简单的解决方案是仅删除远程服务器,对其进行读取并进行获取。


1
花了很多时间来找到这个答案。这没有任何问题。谢谢。:)
kisanme

1
也为我工作,这很奇怪,这解决了
CailinP

1
git remote -v会向您显示您的遥控器,以便您可以掌握该网址,git remote rm origin将其删除,git remote add origin <url>将其重新添加。
Siddhartha

这对我有用。我有一个git子模块,该子模块以某种方式没有获取master以外的任何远程分支。删除并再次添加它解决了它。
Zamrony P. Juhara

为我工作,但现在我得到警告warning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana

7

不幸的是,git branch -agit branch -r告诉你所有的远程分支机构,如果你还没有执行的“混帐提取”。

git remote show origin一直持续工作。还git show-ref显示Git存储库中的所有引用。但是,它的工作原理与git branch命令相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.