Git:看不到新的远程分支


115

一位同事将一个新的远程分支推送到origin / dev / homepage,运行时我看不到它:

$ git branch -r

我仍然看到预先存在的远程分支。

我认为这是因为我的本地远程引用不是最新的,因此当我运行git pull时,由于git pull仅在当前工作分支上正确拉,所以什么也没发生?与git push不同,git push将具有更改的所有分支推送到相应的远程分支?


一个相关的问题- 无法看到远程分支机构
RBT

1
设法忘记git pull,感谢
JelenaČuklina

1
就我而言git fetch <name-of-remote>,这绝招。没有遥控器的名称,它将无法正常工作。
Menno Deij-van Rijswijk

Answers:


163

首先,使用命令仔细检查分支实际上是否已被远程推送git ls-remote origin。如果新分支出现在输出中,请尝试输入以下命令git fetch:它应从远程存储库下载分支引用。

如果您的远程分支仍然没有出现,请仔细检查(在ls-remote输出中)远程上的分支名称是什么,尤其是它是否以开头refs/heads/。这是因为默认情况下,值为remote.<name>.fetch

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

因此,只有名称以开头的远程引用refs/heads/将在本地映射为下面的远程跟踪引用refs/remotes/origin/(即,它们将成为远程跟踪分支)


4
在执行git fetch原点操作后,我能够看到新的远程分支,但是不确定是否只是执行git fetch有什么区别?我读过有关git remote update的信息,但不清楚该怎么做。从现在开始,是否需要为任何新的远程分支运行git fetch?
hybrid9 2012年

1
@ hybrid9如果使用git fetch,git将从默认的远程存储库中下载引用:在默认的远程存储库中,.git/config通常将调用origin,因此这两个命令是等效的,但是由于某些原因,您的特定配置可能有所不同。不,您不需要git fetch为每个分支都付出,因为(默认情况下)它会获取所有分支。
Marco Leogrande,2012年

1
@ hybrid9 git pull等效于git fetch+ git merge(或者git rebase如果您更改了默认值),因此您可以git pull照常使用,新的远程分支将自行弹出。
Marco Leogrande,2012年

1
我最初是运行git pull的,但是我从未见过真正让我感到困惑的新远程分支。直到我运行git fetch origin。感谢您抽出宝贵时间回答我的问题。
hybrid9 2012年

2
@hybrid我有同样的问题。git ls-remote gerritrepo:project显示了新的远程分支,但git branch -a没有...我必须进行另一个克隆,然后新分支才会出现
Vikram

78

检查是否.git/config包含

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master

如果是这样,将其更改为

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*

然后,您应该可以使用它:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'

12
在最初的浅克隆之后,这发生在我身上。
ArkTekniK

完善!!!非常感谢!使用命令安装自定义Homebrew Tap时,这发生在我身上brew tap user/repo:克隆回购的本地副本brew具有您提到的设置,并且无法查看和使用我在回购中拥有的其他分支。再次感谢!:) +1!
rmbianchi

3
可以使用以下命令代替手动编辑.git / config文件。git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"然后git fetch origin获得所有分支的起源
dotnetCarpenter

这是一个不错的!
Madz


30

进行git远程更新还将更新远程存储库中可用的分支列表。

如果您使用的是TortoiseGit(1.8.3.0版及更高版本),则可以执行“ Git->同步”,并且出现的窗口左下方将有一个“远程更新”按钮。点击那个。然后,您应该能够执行“ Git->切换/签出”,并使新的远程分支出现在您可以选择的分支的下拉列表中。


18
git remote update是执行此操作的旧方法,较新的首选命令是git fetch

在我的TortoiseGit(2.8.0.0)版本中,左下方的按钮在箭头下方具有多个选项,它可以记住您先前选择的内容。这意味着该按钮可能不会显示“远程更新”。如果您尚未使用过它,它会说“拉”。因此,单击箭头,您将在选项列表中看到“远程更新”。
Michael Hinds

13

假设我们正在搜索release / 1.0.5

如果git fetch -all不工作,并且您不能看到远程分支和git branch -r不显示这个特定分支。

1.从远程打印所有裁判(分支,标签等):

git ls-remote origin 应该向您显示您正在搜索的远程分支。

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

新分支'release / 1.0.5'出现在输出中。

2.强制获取远程分支:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

现在,您在本地也有引用,您可以结帐(或其他方式)该分支。

任务完成!


1
您是救生员:)
Chakri

#2是我一直在寻找的东西。谢谢!
马修

4

听起来很琐碎,但我的问题是我没有参加正确的项目。确保您在预期的项目中;否则,您将无法拉下正确的分支。


哎呀!好一个!
马克

2

我使用了蛮力并删除了遥控器,然后添加了它

git remote rm <remote>
git remote add <url or ssh>

1

最终对我有用的是将远程存储库名称添加到git fetch命令中,如下所示:

git fetch core

现在您可以看到所有这些内容:

git branch --all

0

您可以签出远程分支/ n git fetch && git checkout remotebranch

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.