Fetch in git不能获取所有分支

我克隆了一个存储库,之后其他人创建了一个新的分支,我想开始工作。我看了说明书,好像非常简单。奇怪的是,这并没有起作用,我找到的所有帖子都表明我在做正确的事情。所以我要让自己受到抨击,因为这里有必须明显的错误:

正确的动作似乎

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在所有可能的排列…

226205 次浏览

远程更新

你需要逃离

git remote update

git remote update <remote>

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

签出一个新分支

跟踪一个(新的)远程分支作为一个本地分支:

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

or(有时没有额外的remotes/它就不能工作):

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

有用的git备忘单

让它更具体 创建一个跟踪分支,这意味着您现在正在跟踪一个远程分支

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来合并你的更改,并将其推送到远程分支,如下所示。

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

希望它能帮到你,并给你一个想法,这是如何工作的。

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

我不得不进入我的GitExtensions远程存储库,因为这里似乎什么都不能工作。在那里,我看到两个分支没有配置远程存储库。调整后如下图所示enter image description here

注意分支noExternal3仍然显示没有远程存储库。不确定bash命令的哪个组合可以找到或调整它。

这个问题可以在检查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/*

通配符*当然表示该路径下的所有内容。

不幸的是,我看到这样的评论后,我已经通过反复试验找到了答案。

从终端写入

git fetch --prune.

它工作得很好。

我今天有个回购的问题。

这不是顶层解决方案中的+refs/heads/*:refs/remotes/origin/*问题。

症状很简单,git fetch origingit fetch似乎没有做任何事情,尽管有远程分支可以获取。

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

< p >删除: git remote rm origin < / p >

and create with: git remote add origin <git uri> < / p >

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

今天我也遇到了同样的问题从头开始设置我的回购。我尝试了所有的方法,除了删除原点并重新添加它之外,没有任何工作。

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

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

下面应该做同样的事情,但使用不同的本地分支名称:

git checkout -b my-formats origin/formats

git c2.23中提供了一个新的语法git switch

git switch -c <branch> --track <remote>/<branch>

所有你需要做的是,应用以下2个命令:

git fetch --all

一旦你看到了分支(之前是不可见的,例如osc_at_works),选择它并按以下方式签出:

git checkout origin/team/Enterprise/osc_at_works