Git: 无法看到新的远程分支

一个同事将一个新的远程分支推送到起源/dev/主页,我在运行时看不到它:

$ git branch -r

我仍然看到原有的远程分支。

我假设这是因为我的本地远程引用不是最新的,因此当我运行 git pull 时没有发生任何事情,因为 git pull 只拉当前工作分支,对吗?不像 git push 把所有发生变化的分支都推送到相应的远程分支?

250899 次浏览

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

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

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

这样,只有名称以 refs/heads/开头的远程引用才会被映射为 refs/remotes/origin/下的远程跟踪引用(也就是说,它们将成为远程跟踪分支)

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

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

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

git fetch core

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

git branch --all

检查 .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'

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

最简单的答案是:

git fetch origin <branch_name>

我用蛮力把遥控器拿出来,然后加了进去

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

您可以签出远程分支/n 检出远程分支

假设我们正在搜索 版本/1.0.5

git fetch --all没用时,您看不到远程分支,而 git branch -r不显示这个特定的分支。

从远程打印所有参考文献(分支,标签,...) :

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

现在您还有了本地的引用,您可以签出(或其他)这个分支。

任务完成!