Git:无法检出分支 – 错误:pathspec'…'与git已知的任何文件都不匹配

我不知道为什么我无法检出我之前工作过的分支。 请参阅以下命令(注意: cocheckout的别名):

 ramon@ramon-desktop:~/source/unstilted$ git branch -a * develop feature/datts_right feature/user_controlled_menu feature/user_controlled_site_layouts master remotes/origin/HEAD -> origin/master remotes/origin/develop remotes/origin/feature/datts_right remotes/origin/master ramon@ramon-desktop:~/source/unstilted$ git co feature/user_controlled_site_layouts error: pathspec 'feature/user_controlled_site_layouts' did not match any file(s) known to git. 

我不确定这是什么意思,我似乎无法在Google上find任何我能理解的东西。

我如何结账该分行,以及我可以做些什么来打破这个分支?

更新

我发现这个post ,并运行git show-ref给我:

 97e2cb33914e763ff92bbe38531d3fd02408da46 refs/heads/develop c438c439c66da3f2356d2449505c073549b221c1 refs/heads/feature/datts_right 11a90dae8897ceed318700b9af3019f4b4dceb1e refs/heads/feature/user_controlled_menu c889b37a5ee690986935c9c74b71999e2cf3c6d7 refs/heads/master c889b37a5ee690986935c9c74b71999e2cf3c6d7 refs/remotes/origin/HEAD e7c17eb40610505eea4e6687e4572191216ad4c6 refs/remotes/origin/develop c438c439c66da3f2356d2449505c073549b221c1 refs/remotes/origin/feature/datts_right c889b37a5ee690986935c9c74b71999e2cf3c6d7 refs/remotes/origin/master 23768aa5425cbf29d10ff24274adad42d90d15cc refs/stash e572cf91e95da03f04a5e51820f58a7306ce01de refs/tags/menu_shows_published_only 429ebaa895d9d41d835a34da72676caa75902e3d refs/tags/slow_dev 

更新.git目录user_controlled_site_layouts位于refs/heads/feature folder ):

 $ ls .git/refs/heads/feature/ datts_right user_controlled_menu user_controlled_site_layouts $ cat .git/refs/heads/feature/user_controlled_site_layouts 3af84fcf1508c44013844dcd0998a14e61455034 

更新上git show 3af84fcf1508c44013844dcd0998a14e61455034

 $ git show 3af84fcf1508c44013844dcd0998a14e61455034 commit 3af84fcf1508c44013844dcd0998a14e61455034 Author: Ramon Tayag <xxx@xxxxx.xxx> Date: Thu May 12 19:00:03 2011 +0800 Removed site layouts migration diff --git a/db/schema.rb b/db/schema.rb index 1218fc8..2040b9f 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20110511012647) do +ActiveRecord::Schema.define(:version => 20110503040056) do create_table "attachments", :force => true do |t| t.string "name" @@ -205,15 +205,6 @@ ActiveRecord::Schema.define(:version => 20110511012647) do t.integer "old_id" end - create_table "site_layouts", :force => true do |t| - t.string "name" - t.text "description" - t.text "content" - t.integer "site_id" - t.datetime "created_at" - t.datetime "updated_at" - end - create_table "site_styles", :force => true do |t| t.text "published" t.datetime "created_at" 

尝试git fetch以便您的本地存储库从github获取所有新的信息。 它只是采取了关于新分行的信息,并没有实际的代码。 之后, git checkout应该可以正常工作。

当我试图结帐新的分支时,我得到以下错误

错误:pathspec“BRANCH-NAME”与git已知的任何文件都不匹配。

当我尝试git checkout origin/<BRANCH-NAME>它去分离头部

(从原籍分离/)

下面解决这个问题

 git remote update git fetch git checkout --track origin/<BRANCH-NAME> 

我得到这个错误的远程分支,没有本地跟踪分支。 即使我确定我已经通过一个简单的检查远程分支机构

 git checkout feature/foo 

在过去,为了解决这个错误我不得不

 git checkout -t -b feature/foo origin/feature/foo 

我也不知道我做了什么来让自己陷入这种情况。

如果你用git branch -D yourbranchname删除了一个分支,并且再次将你的repo克隆了,你可能需要重新创build你的本地分支。

尝试:

 git checkout -b yourbranchname 

Git Windows用户要小心 – 没有--icase-pathspecsGIT_ICASE_PATHSPECS = 1 env var设置 ,git pathspecs将区分大小写,在这种情况下

 git checkout origin/FooBranch "Some/Path/To/File.txt" 

是不一样的

 git checkout origin/FooBranch "some/path/to/file.Txt" 

我这样做时,我做到了以下几点:

  • 使用IntelliJ IDE,连接到混帐
  • 创build一个新的文件,并添加到git
  • 重命名新文件

当我试图检查目录时,我得到了这个错误。

修理:

我在git扩展中打开回购。 我看到文件(旧名称)上演了。 但是既然它不存在,就不能承诺。

我简单地取消这个文件。

然后我重新添加文件(这次正确命名)到git并提交没有错误。

在Windows操作系统默认情况下,git被安装

 core.ignorecase = true 

这意味着git repo文件将不区分大小写,因此需要执行以下操作:

 \yourLocalRepo> git config core.ignorecase false 

你可以在.git \ config文件中find这个configuration

如果它发生在Windows上,这可能是文件名的情况下的问题。

我今天有这个错误 – 我已经创build了新的文件,添加到GIT,然后我改变了一个字母在文件名从低到高,然后我什么都不能 – 承诺,恢复,从回购删除文件。

我发现的唯一的解决办法是再次更改文件名回到完全相同的情况下,当我将此文件添加到GIT,然后做GIT恢复从GIT中删除此文件,然后再次更改文件名,我想要的。 在这些变化后,我可以承诺回购,然后推没有任何问题。

我得到了同样的问题,因为我使用了git clone --depth=1 ,这意味着--single-branch

做一个完整的git clone将解决它。

我今天有这个问题,我试图git checkout foo并得到error: pathspec 'foo' did not match any file(s) known to git.

原来我是在错误的回购 。 所以经验教训:在吓坏之前检查你正在看的回购。

在我的情况下,我有两个分支1)主人(这是为活服务器)2)开发(testing服务器)。 我已经设置了多个远程在相应的服务器上推送代码。 当我试图切换分支,我得到了错误,如error: pathspec 'master' did not match any file(s) known to git.

你可以通过git remote -v看到它们。 我通过git remote remove <remote-name>其他远程设备

然后git fetch

现在我可以通过git checkout <branch-name>来检出分支了。

如果分支名称和你没有任何uncommited文件,然后试试这个

 git fetch && git checkout <branch name> 

我有同样的问题..我想我有分支名为foo当我尝试:

 git checkout foo 

我得到:

 error: pathspec 'foo' did not match any file(s) known to git. 

然后我尝试了完整的分支名称:

 git checkout feature/foo 

然后为我工作。

在我的情况下,我重命名了一个文件,改变了文件的大小写,即SomeFile.js – > someFile.js

我认为这与问题有关。 做一个混帐提取没有解决这个问题。

我把文件移出我的项目,做了一个抓取,没有他们的推送。 然后,我做了一个取,把他们加回来,并推了一下,它的工作。 我不知道是否需要所有这些步骤,但最终确实奏效。

这些答案都没有解决我的问题:

 Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version (master) $ git log --format=oneline b9cc6a9078312865280fb5432a43e17eff03a5c6 Formatted README 288772f36befe6bd60dd41b8185f1e24e0119668 Updated README documentation d2bdbe18f4169358d46fad50eacfb89786df3bf8 Version object v3.0.0-SNAPSHOT a46b1910a3f548b4fa254a6055d25f68d3f217dd VersionFactory is now Platform agnostic 24179ae569ec7bd28311389c0a7a85ea7b4f9594 Added internal.Platform abstraction 252b684417cf4edd71aed43a15da2c8a59c629a7 Added IPlugin implementation for Sponge e3f8d21d6cf61ee4fc806791689c984c149b45e3 Added IPlugin implementation for Bukkit aeb403914310b4b10dee9e980cf64472e2bfda79 Refactored Version.java ef50efcff700c6438d57f70fac30846de2747a7e Refactored TesterFactory a20808065878d4d28657ae362235c837cfa8e625 Added IPlugin abstraction 9712a3575a70060d7ecea8b62bb5e888fdc32d07 Heavily refactored Tester 02d025788ae740dbfe3ef76a132cea8ca4e47467 Added generic Predicate<T> interface 9c565777abea9be6767dfdab4ab94ed1173750dd Minor refactoring of testCompareTo() 2ff2a28c221681e256dcff28770782736d3a796a Version object v2.0.1 d4b2e2bd830f77cdbc2297112c2e46b6555d4393 Fix compareTo() 05fe7e012b07d1a5b8de29804f96d9a6b24229a1 Make compareTo() fail 6e85371414357a41c1fc0cec0e75adba92f96832 Fix VersionFactory passing null c1fd1f032f87d860d5ed9d6f6679c9fa522cff8d Version object v2.0 62c3a92c008a2ed11f0a4d016080afc3541d0700 Version object v1.2 c42e9e617128085e872c51b4d977a04e48d69e8f Deprecated, doc'd, future-proofed getNm Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version (master) $ git checkout 3a796a error: pathspec '3a796a' did not match any file(s) known to git. 

我正在尝试返回并构buildVersion object v2.0.1的提交。 幸运的是,我想到了尝试整个哈希码,它的工作! 这意味着我正在使用散列码的错误末尾。

 Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version (master) $ git checkout 2ff2a Note: checking out '2ff2a'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 2ff2a28... Version object v2.0.1 Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version ((2ff2a28...)) $ 

如上所示,对于部分散列码,您必须提供前端,而不是后端。

在我的情况下,我不进入子模块目录

  • git submodule init
  • git submodule update

所以git被链接到父文件夹,确实错过了那个分支。

我在git-bash上得到了相同的pathspec error 。 我在窗户上使用了Tortoise git来切换/检出分支。

这可能是上游改写历史时造成的。

当发生这种情况时,我把所有受影响的回购,从上游克隆他们,并使用“git格式补丁”/“git am”从旧世界到新的任何进展的工作渡轮。

在Android Studio中重命名未提交的文件后发生在我身上。

Git似乎在版本库中有旧版本,即使它不存在了。

 fetch, pull, checkout, add all and so on did not help in my case! 

所以我打开了TortoiseGit的Git GUI,它显示了导致问题的文件。

之后,我用版本库删除了这个文件

 git rm -r --cached /path/to/affected/file 

问题没有了

我面临类似的问题。 导致我陷入这个麻烦的是:我有多个远程分支,我删除了有代码的文件夹。 我做了拉。 :

 git pull git@git.corp...... 

然后我添加了远程仓库:

 git remote add upstream git@git.corp....... 

然后我试图改变分支到其他分支说AAAA和我得到错误

 error: pathspec 'AAAA' did not match any file(s) known to git. 

花了一个小时后,我find了解决办法。 我再次删除了源文件夹。 然后我做了一个git拉:

 git pull git@git.corp...... 

然后我改变了分支,然后把它连接到远程仓库:

 git checkout AAA 

然后我将它添加到远程存储库

 git remote add upstream git@git.corp...... 

在此之后,我可以轻松切换分支。 虽然这不是一种标准的方式,但是在我尝试了所有上述选项之后,它对我来说很有效。

在Windows上使用Git时,我遇到了这个问题。 就我而言,这是一个个案。 我已经添加并提交了一个文件到我的仓库,后来只改变了它的情况。 为了解决这个问题,我把这个文件重命名为与原来的大小写相匹配,并用git mv命令重新命名。 显然,这让git跟踪重命名。

注意:我正在使用Cygwin。

我上次遇到这个问题,而我所做的就是删除与该分支相关的文件夹(或源代码)。

例如:分支origin / foo在你的本地创build文件夹foo,所以我只是删除它,并使用git fetch $ checkout从远程获取代码。

或者你可以通过在本地创build文件夹来完成你想要结账的分支。

例如:在本地创build文件夹foo,之后使用Git命令: git branch --set-upstream-to=origin/foo foo ,即所有。 使用git pull来获取代码。

我的情况我在“git branch …:”之前运行“git fetch”,但得到了同样的错误,然后我分析了它, 发现错误在我的分支名称中 ,修正了它,并成功切换到分支。

我做了一个愚蠢的错误,不提供-m标志,而提交(哈哈发生)

 git commit -m "commit message in here" 
 $ cat .git/refs/heads/feature/user_controlled_site_layouts 3af84fcf1508c44013844dcd0998a14e61455034 

你能否确认下列工作:

 $ git show 3af84fcf1508c44013844dcd0998a14e61455034 

可能有人重写历史,并且这个提交不再存在(不pipe什么原因)。

我在Github桌面上点击“Update from …”之后,在错误的回购被选中后得到了这个。 然后,我改变了回购正确的,但当我试图删除更改,我得到了这个错误。 这是因为这些是我select的回购中的新文件,而不是我想要更新的文件。

我只是将回购select器改回到我第一次错误select的那个,然后我就可以删除这些更改。

然后我把回购select器改成了我想要的。

这发生在我自己创build的两个本地分支上的Windows上。 一旦离开分支,我无法结帐

bugfix_#303_multiline_opmerkingen_not_displaying_correctly_in_viewer

也不

bugfix_339_hidden_​​fields_still_validated

你可以从下面的Git bash的截图中看到。

在这里输入图像说明

当我尝试使用Git GUI时,我根本无法看到分支。 但是当我使用Pycharms的git工具时,我看到了这个:

在这里输入图像说明

所以由于某些原因,Windows决定为我的分支名称添加一些难以理解的字符,这就是它没有工作的原因。 在Pycharm中重命名分支的确有诀窍,所以猜测这也适用于其他的IDE。

一个可能的原因,如果你正在使用MINGW *

 ISSUE 

检查要检出的分支名称。parsing命令时,从分支名称中' 省略字符 '

例如:如果你有一个分支名称像bugfix/some-'branch'-name

当你发出命令: > git checkout bugfix/some-'branch'-name将它parsing为bugfix/some-branch-name ,注意它省略了' character。

 REMEDY 

要签出这种分支名称,请在发出命令时添加转义字符

input: > git checkout bugfix/some-\'branch\'-name

它应该工作,然后!

当我第一次玩git的时候遇到了同样的问题。 当试图我第一次提交…

 git commit -m 'first commit!' 

我得到了由OP提到的错误…

 error: pathspec 'commit!'' did not match any file(s) known to git. 

我以为我可能一直在提交信息中使用关键字混淆混帐,所以我试了几个字,并收到相同的错误。

最后,我在消息中使用了双引号。

 git commit -m "first commit!" 

这原来是成功的…

 [master (root commit) 0000000] first commit! 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dummyDoc.txt 

我有同样的问题,并从这个链接中获得一些信息: git fetch不会获取所有分支

所以现在呢,我可能不知道这种情况是怎么发生的,至less我们可以解决:

第1步。检查你的“remote.origin.fetch”设置,应该是这样的

$ git config –get remote.origin.fetch

+裁判/头/ private_dev_branch:裁判/遥控器/产地/ private_dev_branch

第2步。更改“remote.origin.fetch”以获取所有内容

$ git config remote.origin.fetch“+ refs / heads / *:refs / remotes / origin / *”

$ git config –get remote.origin.fetch

+裁判/头/ *:参/遥控器/产地/ *

然后,你可以尝试“git pull”(也许“git fetch origin”也可以,但是我没有试过)得到所有的分支。