检出存在于远程的一个分支

5

我正在使用 git 版本 1.8.3.1 (centos 7)。我在 github 上有一个仓库,其中包含许多分支。我克隆了该仓库并尝试检出其中一个分支,但却无法进行:

$ git clone my_repo
$ cd my_repo
$ git checkout my_desired_branch
error: pathspec 'my_desired_branch' did not match any file(s) known to git.

我知道这个分支在远程分支中存在;我从另一台计算机上推送了它,并且可以在Github上轻松地检查它。在Stack Overflow上阅读类似问题的答案时,回答似乎各不相同,包括:

$ git fetch [--all]
$ git pull [--all]

然而,这些方法都不能解决我的问题。此外,无论我做什么,除了主分支之外,我列出的分支中没有其他分支显示:
$ git branch
* master
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git branch -r
  origin/HEAD -> origin/master
  origin/master

我也无法通过哈希值从仓库中获取我的分支:

$ git fetch origin 6175e3ae4c88669af8aa5cd12b

这个命令即使使用--verbose参数也不会输出任何内容...但是检查退出码可以发现它是1。当然:

$ git checkout 6175e3ae4c88669af8aa5cd12b
fatal: reference is not a tree: 6175e3ae4c88669af8aa5cd12b

这真的很令人沮丧。到目前为止,我已经尝试了看似所有可能的fetchpullbranch的组合,但无论我做什么,我的本地克隆库甚至都不能显示这些分支的存在,更不用说让我检出它们了。

发生了什么?这似乎是世界上最简单的事情:既然我的repo有一些我想要的分支,那就克隆该repo并检出该分支。


尝试运行以下命令并发布输出结果:git cat-file -p 6175e3ae4c88669af8aa5cd12b 如果该SHA存在,则会告诉您它是什么。如果它指向一个文件,它将输出该文件。如果它是提交,则会输出提交详细信息。我猜测这个SHA是未知的,或者指向的是文件而不是提交。在此之前,我可能会执行git fetch origin - CodingWithSpike
git remote -v 命令会给你什么信息? - alextercete
3个回答

4
为了确保您从远程获取所有的分支,请尝试以下操作:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
git fetch --all

请参见:如何获取所有远程分支?

2
然而,这些方法都不能解决我的问题。此外,无论我做什么,在列出分支时,除了主分支之外,没有任何其他分支显示。
从您发布的输出来看,似乎您正在寻找的分支不存在于远程服务器上。
但是,如果它存在于远程服务器上(假设它的名称为my_desired_branch),则可以使用以下命令创建一个同名的本地分支,该分支指向远程分支:
git branch my_desired_branch origin/my_desired_branch 
git checkout my_desired_branch

你可以使用 git checkout -b 命令来同时合并上述两个命令:
git checkout -b my_desired_branch origin/my_desired_branch 

如果本地分支 my_desired_branch 已经存在,但它没有连接到远程分支,您可以使用以下命令重新连接它们:
git branch -u origin/my_desired_branch my_desired_branch

如果您需要更多有关使用git branch的帮助,您可以阅读文档或在命令行中运行git help branch


1

要检查远程仓库,您可以使用 git ls-remote 命令:

$ git ls-remote https://github.com/git/git.git
ff4ea6004fb48146330d663d64a71e7774f059f9        HEAD
a08595f76159b09d57553e37a5123f1091bb13e7        refs/heads/maint
ff4ea6004fb48146330d663d64a71e7774f059f9        refs/heads/master
b2aa7f843ccc79397d54723df13034a8761f5a18        refs/heads/next
0fea0509a8d85f1133db93c39b00e2c6ef285b4f        refs/heads/pu
[...]

这将列出远程存储库中存在的所有引用(分支/标签等)以及它们所指向的哈希值。在克隆该存储库后,您应该能够访问所有这些引用。
您确定使用了正确的地址进行克隆吗?在您的情况下,git ls-remote 列出了什么?如果您的存储库是公共的,请提供您用于克隆的完整地址。

“git ls-remote” 展示了很多分支,包括我想获取的那个。不幸的是,它不是公共仓库。 - limp_chimp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接