在git中获取并不能获取所有分支


201

我已经克隆了一个存储库,然后其他人创建了一个新分支,我想开始进行工作。我阅读了手册,看起来很简单。奇怪的是,它不起作用,我发现的所有帖子都表明我在做正确的事情。因此,我将自己置于沉重打击之下,因为这肯定存在某些错误:

正确的行动似乎

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

此时,由于某种原因,在git fetch我看不到dev-gml远程分支之后,出现了一个问题。为什么不?如果我重新克隆存储库,它就在那里,因此肯定存在远程分支:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

我试过git updategit pullgit fetch --allgit pretty-please在所有可能的排列...


44
git config --get remote.origin.fetch产生什么?如果不是+refs/heads/*:refs/remotes/origin/*,可能应该是。
torek

是的,正是它产生的东西
爱德华·纽厄尔

3
完全一样的问题,但是上面的注释解决了!我+refs/heads/master:refs/remotes/origin/master使用的master不是*
Mirko

1
对我来说同样的问题,但是此页面上的所有建议都无法解决。奇怪的。
Magnus

1
@ thoni56:是的,这可能是由于克隆浅造成的。
陈越晃

Answers:


383

检查remote.origin.fetch设置时可以看到问题
(开头的行$是带有我键入的命令的bash提示。其他行是结果输出)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

如您所见,就我而言,遥控器设置为专门且仅获取master分支。我按照下面的方法修复了它,包括第二条命令来检查结果。

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

通配符*当然意味着该路径下的所有内容。

不幸的是,在我仔细研究并通过反复试验找到答案后,我看到了此评论


2
这可能是可接受的答案,因为它实际上解决了原始帖子中的问题。
LocalPCGuy 2015年

1
只是附带说明,我必须添加--replace-all参数以替换我的remote.origin.fetch
Garis M Suero 2015年

4
请注意,如果仅使用单个分支克隆存储库,则可能发生这种情况,例如git clone <url> --branch <branch> --single-branch [<folder>]
Narretz

2
检查stux的答案
Newbee

5
当您克隆git clone ... --depth 1
Anatolii Bivol,

107

我今天在一个回购上遇到了这个问题。

+refs/heads/*:refs/remotes/origin/*按照最佳解决方案,这不是问题。

症状是简单地认为git fetch origingit fetch只是似乎没有做任何事情,虽然有远程分支获取。

在尝试了许多事情之后,我删除了远程源,然后重新创建它。这似乎已经解决了。不知道为什么。

删除: git remote rm origin

并重新创建: git remote add origin <git uri>


14
我有正确的混帐配置remote.origin.fetch+refs/heads/*:refs/remotes/origin/*。上述解决方案对我有帮助。
Newbee '18

9
这个解决方案对我来说也是正确的。这很不幸,因为它表明Git中可能存在错误。
罗伯特·奥施勒

2
这也解决了我的问题。我在git版本2.19.1v的机器上似乎也有这个问题,但在git版本2.17.1v的另一台机器上没有遇到过
jerpint

6
git remote update origin为我工作。我猜需要刷新吗?
费利佩·杰拉德

2
git remote update origin不适用于我,但删除并添加遥控器可以。
Anatoliy Kmetyuk,

58

远程更新

你需要跑步

git remote update

要么

git remote update <remote> 

然后,您可以运行git branch -r以列出远程分支。

结帐新分支

要将(新)远程分支跟踪为本地分支:

git checkout -b <local branch> <remote>/<remote branch>

或(有时没有多余的就无法使用remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

有用的git速查表


5
但是我的问题是我无法签出现有的远程分支,因为我的git客户端认为它不存在。看到我的问题。请注意,当我git fetch随后运行时,git branch -a它不会显示所有分支。我必须删除工作目录,然后重新克隆才能看到dev-gml协作者创建的分支。这次它起作用了,但是我们会经常分支!
爱德华·纽厄尔

嘿@EdwardNewell,谢谢你的回答,只是为了让你知道,你的链接cheat.errtheblog.com/s/git对我来说已经死了……
Kjellski 2013年

自从我第一次提出这个问题以来已经有很长时间了,而且由于有人重新发布,我才被ping通。我接受了这个答案,尽管起初没有任何效果。我最终标记为正确的原因是因为我怀疑他在旁边Edit:写得很好。如果仍然遇到问题,我会尝试这种方法。HTH
Edward Newell

记录下来,对我有帮助的是git remote update origin。这样就可以通过看到丢失的分支git branch -l -r。(我确实看过了git config --get remote.origin.fetch,输出结果+refs/heads/*:refs/remotes/origin/*与预期的一样。)
Robert Dodier


4

使其更加具体创建跟踪分支,这意味着您现在正在跟踪远程分支。

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

之后您可以

git branch   # to see the remote tracking branch "exp" created .

然后在那个分支上做

git checkout branchname
git checkout exp

对分支进行更改后。您可以git fetch和git与远程跟踪分支合并以合并更改并按如下所示推送到远程分支。

git fetch origin
git merge origin/experimental  
git push origin/experimental

希望它能对您有所帮助,并为您提供一个想法。


1

我有一个类似的问题,但是就我而言,我可以拉/推到远程分支,但是git status没有显示远程分支的本地分支状态。

另外,就我而言git config --get remote.origin.fetch,它没有返回任何东西

问题在于.git/config相应远程块的访存行中的文件中有错字。可能是我之前错误添加的内容(有时我直接查看此文件,甚至对其进行编辑)

因此,请检查.git/config文件中的远程条目是否正确,例如:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

这可能是由于面部掌上电脑的时刻:如果您在多个克隆之间切换,则很容易发现自己在错误的源树中试图拉一个不存在的分支。如果克隆具有相似的名称,或者存储库是来自多个贡献者中的每个参与者的同一项目的不同克隆,则更容易。当真正的问题失去焦点或工作环境或同时失去两者时,一个新的git clone显然似乎可以解决该“问题”。


0

我不得不进入我的GitExtensions远程存储库,因为这里似乎没有任何作用。在那里,我看到2个分支没有配置远程存储库。调整后看起来如下在此处输入图片说明

注意分支noExternal3仍然显示为没有远程存储库。不知道是什么bash命令组合可以找到或调整的。


0

今天遇到了同样的问题,从头开始设置我的仓库。我尝试了所有操作,但删除了原点并将其重新添加回去后,没有任何效果。

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

-1

我们遇到了同样的问题,您必须使用

git fetch

git push origin branch_name

git branch -r

希望这可以帮助遇到相同问题的人

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.