172

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

$ git branch -r

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

我认为这是因为我的本地远程引用不是最新的,因此当我运行 git pull 时什么也没发生,因为 git pull 只拉当前工作分支,对吗?与 git push 不同,它将所有有更改的分支推送到相应的远程分支?

4

9 回答 9

213

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

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

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

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

于 2012-10-06T19:08:01.283 回答
129

检查是否.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'
于 2017-09-06T17:26:40.297 回答
89

最简单的答案是:

git fetch origin <branch_name>

于 2018-03-28T14:24:18.957 回答
52

假设我们正在搜索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

现在您在本地也有 refs,您可以检出(或其他)这个分支。

任务完成!

于 2020-03-20T14:09:31.897 回答
32

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

如果您使用的是 TortoiseGit,从 1.8.3.0 版本开始,您可以执行“Git -> Sync”,在出现的窗口左下方会有一个“Remote Update”按钮。点击那个。然后您应该能够执行“Git -> Switch/Checkout”并让新的远程分支出现在您可以选择的分支下拉列表中。

于 2013-06-26T20:05:57.817 回答
4

这听起来微不足道,但我的问题是我不在正确的项目中。确保您参与了您希望参与的项目;否则,您将无法拉下正确的分支。

于 2017-10-23T22:21:55.737 回答
4

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

git remote rm <remote>
git remote add <url or ssh>
于 2019-03-06T11:38:51.733 回答
2

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

git fetch core

现在你可以看到它们都是这样的:

git branch --all
于 2017-05-05T03:55:43.813 回答
0

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

于 2020-01-16T14:20:40.377 回答