我正在使用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上检查它没有问题。阅读有关堆栈溢出的类似问题,答案似乎包括:
$ 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
这真的很令人沮丧。在这一点上,我似乎已经尝试了fetch
、pull
和branch
的所有可能组合,无论我做什么,我都无法让我的本地克隆这个存储库甚至显示这些分支的存在,更不用说让我检查它们了。
这是怎么回事?这似乎是世界上最简单的事情:鉴于我的存储库具有我想要的某个分支,请克隆存储库并检查该分支。
要确保从远程获取所有分支,请尝试:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
git fetch --all
请参阅: 如何获取所有远程分支?
但是,这些都不能解决我的问题。此外,无论我做什么,当我列出我的分支时,除了主分支之外什么都没有显示
从您发布的输出来看,您正在寻找的分支似乎不存在在远程服务器上。
但是,如果它存在于远程服务器上(假设它的名称是 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
。
要检查远程存储库,您可以使用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
列出了什么?如果您的存储库是公共的,请提供您用于克隆的完整地址。