git fetch不会获取所有分支

时间:2012-07-24 03:48:32

标签: git branch fetch

我克隆了一个存储库,之后其他人创建了一个新的分支,我想开始研究它。我阅读了手册,看起来很简单。奇怪的是它不起作用,我发现的所有帖子都表明我做的是正确的。所以我会让自己受到抨击,因为必须明显是错误的:

正确的操作似乎

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 ......

10 个答案:

答案 0 :(得分:261)

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

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

正如您所看到的,在我的情况下,远程设置为专门和仅获取主分支。我按照下面修复它,包括检查结果的第二个命令。

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

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

不幸的是,在我已经挖掘并通过反复试验找到答案后,我看到了this comment

答案 1 :(得分:43)

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

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

或(如果没有额外的remotes/,有时它不起作用):

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

修改 您需要运行git remote updategit remote update <remote>。然后,您可以运行git branch -r列出远程分支。

有用的git cheatsheets

答案 2 :(得分:40)

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

根据最佳解决方案,+refs/heads/*:refs/remotes/origin/*问题并非如此。

症状只是git fetch origingit fetch似乎没有做任何事情,尽管有远程分支要提取。

在尝试了很多东西后,我删除了原始远程,并重新创建它。这似乎已经解决了。不知道为什么。

删除: git remote rm origin

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

答案 3 :(得分: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 merge,以合并您的更改并推送到远程分支,如下所示。

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

希望它有所帮助并给你一个想法,它是如何工作的。

答案 4 :(得分:2)

从终端

写下来
git fetch --prune.

它工作正常。

答案 5 :(得分:2)

今天遇到了同样的问题,从头开始设置我的存储库。我尝试了所有方法,除了删除原点,然后再次将其重新添加回原处没有任何作用。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我不得不进入我的GitExtensions远程存储库,因为这里似乎没有任何工作。在那里,我看到2个分支没有配置远程存储库。调整后看起来如下enter image description here

通知分支noExternal3仍显示为没有远程存储库。不确定bash命令的组合会找到或调整它。

答案 8 :(得分:0)

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

git fetch

git push origin branch_name

git branch -r

希望这可以帮助有人面对同样的问题

答案 9 :(得分:0)

我有一个类似的问题,但是就我而言,我可以拉/推到远程分支,但是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/*