291

我克隆了一个存储库,之后其他人创建了一个新分支,我想开始处理它。我阅读了手册,似乎很容易。奇怪的是它不起作用,我发现的所有帖子都表明我在做正确的事情。所以我要让自己受到抨击,因为这肯定有什么明显的错误:

正确的做法似乎

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 update所有可能git pull的排列方式git fetch --all...git pretty-please

4

11 回答 11

566

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/*

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

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

于 2014-09-19T20:25:07.357 回答
183

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

根据顶级解决方案,这不是+refs/heads/*:refs/remotes/origin/*问题。

症状很简单,git fetch origin或者git fetch只是似乎没有做任何事情,尽管有远程分支要获取。

在尝试了很多事情之后,我删除了原始遥控器,并重新创建了它。这似乎已经解决了它。不知道为什么。

删除: git remote rm origin

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

于 2018-03-09T03:03:27.803 回答
86

远程更新

你需要跑

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 备忘单

于 2012-07-24T04:26:34.633 回答
13

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

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
于 2020-05-28T17:45:14.583 回答
11

从终端写

git fetch --prune.

它工作正常。

于 2018-01-03T14:16:31.073 回答
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

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

于 2012-07-24T05:26:25.550 回答
4

我遇到了类似的问题,但是在我的情况下,我可以拉/推到远程分支,但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/*
于 2019-10-28T09:48:22.013 回答
1

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 switchgit c2.23 中提供了一种新语法

git switch -c <branch> --track <remote>/<branch>
于 2021-11-16T04:17:33.427 回答
0

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

于 2013-03-05T15:20:31.477 回答
0

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

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

于 2014-07-28T14:15:06.250 回答
-1

我们有同样的问题,你必须使用

git fetch

git push origin branch_name

git branch -r

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

于 2016-02-25T11:44:18.077 回答