git fetch不会获取所有分支

我已经克隆了一个仓库,之后其他人创build了一个新的分支,我想开始工作。 我看了手册,看起来很简单。 奇怪的是它不工作,我发现所有的post都build议我做正确的事情。 所以我会让自己受到抨击,因为肯定会有一些明显的错误:

正确的行动似乎

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

在这一点上有一个问题,出于某种原因后,我不能看到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在所有可能的排列中…

检查remote.origin.fetch设置时可以看到问题
(以$开头的行是带有我input的命令的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/* 

通配符*当然意味着在这条path下的一切。

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

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

 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

  • Git Cheat Sheet ( 我个人最喜欢的
  • 一些关于git的笔记
  • Git Cheat Sheet (pdf)

为了使它更具体创build一个跟踪分支,这意味着你现在正在跟踪一个远程分支。

 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 

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

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

我不得不进入我的GitExtensions远程仓库,因为这里似乎没有任何工作。 在那里我看到2个分支没有configuration远程仓库。 调整后看起来如下 在这里输入图像说明

通知分支noExternal3仍显示为没有远程存储库。 不知道什么组合的bash命令会find或调整。

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

 git fetch git push origin branch_name git branch -r 

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