Git:看不到新的远程分支

hyb*_*id9 99 git remote-branch

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

$ git branch -r
Run Code Online (Sandbox Code Playgroud)

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

我认为这是因为我的本地远程refs不是最新的因此当我运行git时没有发生任何事情,因为git pull只会拉动当前工作分支正确吗?与git push不同,它将所有对更改的分支推送到相应的远程分支?

Mar*_*nde 136

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

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

+refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

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

  • 在做了一个git fetch origin之后,我能够看到新的远程分支,但是如果我只是进行git fetch,那么不确定区别是什么?我读到了关于git远程更新的内容,但不清楚它会做些什么.我是否需要从这里开始为任何新的远程分支运行git fetch? (2认同)
  • @hybrid我有同样的问题。git ls-remote gerritrepo:project显示了新的远程分支,但是git branch -a没有...我必须进行另一个克隆,然后新的分支才会出现 (2认同)

Jes*_*ick 51

检查是否.git/config包含

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

如果是这样,改为说

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

然后你应该能够使用它:

$ 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'
Run Code Online (Sandbox Code Playgroud)

  • 可以使用以下命令代替手动编辑 _.git/config_ 文件。`git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"` 然后 `git fetch origin` 获取 _origin_ 上的所有分支。 (8认同)
  • 在最初的浅克隆之后,这发生在我身上。 (4认同)
  • 我遇到了这个问题,第一个答案对我没有帮助,但你的答案对我有帮助。我认为原因可能是我只从远程克隆了一个分支。 (2认同)

jpm*_*tin 43

假设我们正在寻找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
Run Code Online (Sandbox Code Playgroud)

新分支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
Run Code Online (Sandbox Code Playgroud)

现在你也有本地的 refs,你可以结帐(或其他)这个分支。

任务完成!

  • #2 对我有用,但每次我需要获取远程分支时我都必须这样做。更新 git 配置对我来说是最终的解决方案。 (3认同)

Jac*_*ski 32

我有时遇到同样的问题.

最简单的答案是:

git fetch origin <branch_name>

  • 这实际上是唯一对我有用的东西。 (8认同)
  • 它对我不起作用。我收到此错误:`致命:找不到远程引用 &lt;branch_name&gt;` (5认同)
  • 是的,它也对我有用,在这个 git checkout 工作正常之后! (3认同)

met*_*rge 29

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

如果您使用的是TortoiseGit,从版本1.8.3.0开始,您可以执行"Git - > Sync",并且会出现一个窗口左下角的"远程更新"按钮.点击它.然后你应该能够做"Git - > Switch/Checkout"并让新的远程分支出现在你可以选择的分支下拉列表中.

  • `git remote update`是一种旧方法,新的首选命令是`git fetch`. (16认同)

Bla*_*rai 6

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


Rub*_*uck 6

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

git remote rm <remote>
git remote add <url or ssh>
Run Code Online (Sandbox Code Playgroud)