git fetch不会获取所有分支

Edw*_*ell 162 git branch fetch git-fetch

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

似乎是正确的行动

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml
Run Code Online (Sandbox Code Playgroud)

此时出现问题,由于某些原因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
Run Code Online (Sandbox Code Playgroud)

我试过git update,git pull,git fetch --all,git pretty-please在所有可能的排列...

And*_*ASM 312

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

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

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

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

通配符*当然意味着该路径下的一切.

不幸的是,在我已经挖掘并通过反复试验找到答案后,我看到了这个评论.

  • 当您使用 `git clone ... --depth 1` 进行克隆时可能会发生这种情况 (25认同)
  • 如果我们的remote.origin.fetch已经正确,我们该怎么办? (6认同)
  • 使用“git clone --depth <深度> <repo>”进行浅层克隆意味着“--single-branch”,如手册页 [git-clone(1)](https://git-scm.com 中所述) /docs/git-clone#Documentation/git-clone.txt---深度lt深度gt),所以我们最好使用`git clone --深度 <深度> --no-single-branch <repo>`。 (5认同)
  • 请注意,如果您仅使用单个分支克隆存储库,例如`git clone <url> --branch <branch> --single-branch [<folder>],则会发生这种情况. (4认同)
  • 这应该是可接受的答案,因为它实际上解决了原始帖子中的问题. (2认同)
  • 检查stux的答案 (2认同)

stu*_*tux 67

我今天在回购时遇到过这个问题.

+refs/heads/*:refs/remotes/origin/*根据最佳解决方案,这不是问题.

症状只是那个git fetch origin或者git fetch似乎没有做任何事情,尽管有远程分支来获取.

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

删除: git remote rm origin

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

  • 我对`remote.origin.fetch`有正确的git配置,即`+ refs/heads/*:refs/remotes/origin/*`.以上解决方案帮助了我. (9认同)
  • `git remote update origin` 对我有用。我想有些东西需要提神? (8认同)
  • `git Remote update origin` 对我不起作用,但删除和添加遥控器却有用。 (3认同)
  • 这个解决方案对我来说也是正确的。这很不幸,因为它表明Git中可能存在错误。 (2认同)
  • 这也解决了我的问题。我在 git 版本为 2.19.1v 的机器上似乎也有这个问题,但在另一台 git 版本为 2.17.1 的机器上没有遇到这个问题 (2认同)
  • 今天我在 2.25.1 版本的多个存储库中发生了这种情况。注意到我们最近更改了一些存储库以使用“main”作为主分支,然后删除了“master”。在大多数机器上,我们都没有遇到 get fetch --all 的问题,但在我的(最新的)WSL ubunto 实例上,与多个存储库一致。 (2认同)

phi*_*pvr 46

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

git checkout -b <local branch> <remote>/<remote branch>
Run Code Online (Sandbox Code Playgroud)

或(有时没有额外的东西它不起作用remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>
Run Code Online (Sandbox Code Playgroud)

编辑: 您需要运行git remote updategit remote update <remote>.然后,您可以运行git branch -r以列出远程分支.

有用的git cheatsheets

  • 但我的问题是我无法签出*现有*远程分支,因为我的git客户端认为它不存在.看我的问题.请注意,当我运行`git fetch`后跟`git branch -a`时,它不会显示所有分支.我不得不删除我的工作目录并重新克隆以查看协作者制作的分支`dev-gml`.它这次工作,但我们经常分支! (4认同)
  • 根据记录,这里对我有帮助的是“git Remote update origin”。这使得丢失的分支通过“gitbranch -l -r”可见。(我确实查看了 `git config --get remote.origin.fetch` 并且输出是 `+refs/heads/*:refs/remotes/origin/*` 正如预期的那样。) (2认同)

Blo*_*kas 10

今天从头开始设置我的回购时遇到了同样的问题。我尝试了一切,除了删除原点并再次重新添加之外,没有任何效果。

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


Sam*_*RAK 9

从终端写入

git fetch --prune.
Run Code Online (Sandbox Code Playgroud)

它工作正常。

  • 谢谢你!我尝试了很多事情,并认为我应该尝试一下......现在看看我实际上做了什么...... (2认同)

Juh*_*uh_ 6

我遇到了类似的问题,但是就我而言,我可以拉/推到远程分支,但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/*
Run Code Online (Sandbox Code Playgroud)


Cra*_*cks 5

git checkout --track origin/formats似乎做到了这一点:

% git branch      ### show local branches
* main

% git branch - a  ### show local and remote branches
* main
  remotes/origin/HEAD -> origin/main
  remote/origin/formats
  remote/origin/main

% git checkout --track origin/formats
Switched to a new branch 'formats'
Branch 'formats' set up to track remote branch 'formats' from 'origin'

% git branch
* formats
  main
Run Code Online (Sandbox Code Playgroud)

以下应该执行相同的操作,但使用不同的本地分支名称:

git checkout -b my-formats origin/formats 
Run Code Online (Sandbox Code Playgroud)

git switchgit c2.23 中提供了新语法

git switch -c <branch> --track <remote>/<branch>
Run Code Online (Sandbox Code Playgroud)


nin*_*nin 5

我已经用 --depth 1 克隆了存储库,所以这些答案不起作用。对我有用的是

git fetch origin BRANCHNAME:BRANCHNAME
Run Code Online (Sandbox Code Playgroud)

它成功创建了一个同名的本地分支。