git:无法签出分支-错误:路径规范'…'与git已知的任何文件不匹配

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

ramon@ramon-desktop:~/source/unstilted$ git branch -a* developfeature/datts_rightfeature/user_controlled_menufeature/user_controlled_site_layoutsmasterremotes/origin/HEAD -> origin/masterremotes/origin/developremotes/origin/feature/datts_rightremotes/origin/masterramon@ramon-desktop:~/source/unstilted$ git co feature/user_controlled_site_layoutserror: pathspec 'feature/user_controlled_site_layouts' did not match any file(s) known to git.

我不知道这是什么意思,我似乎在谷歌上找不到任何我能理解的东西。

我如何检查那个分支,我可以做些什么来打破这个?

更新

我找到了这篇文章,运行git show-ref给了我:

97e2cb33914e763ff92bbe38531d3fd02408da46 refs/heads/developc438c439c66da3f2356d2449505c073549b221c1 refs/heads/feature/datts_right11a90dae8897ceed318700b9af3019f4b4dceb1e refs/heads/feature/user_controlled_menuc889b37a5ee690986935c9c74b71999e2cf3c6d7 refs/heads/masterc889b37a5ee690986935c9c74b71999e2cf3c6d7 refs/remotes/origin/HEADe7c17eb40610505eea4e6687e4572191216ad4c6 refs/remotes/origin/developc438c439c66da3f2356d2449505c073549b221c1 refs/remotes/origin/feature/datts_rightc889b37a5ee690986935c9c74b71999e2cf3c6d7 refs/remotes/origin/master23768aa5425cbf29d10ff24274adad42d90d15cc refs/stashe572cf91e95da03f04a5e51820f58a7306ce01de refs/tags/menu_shows_published_only429ebaa895d9d41d835a34da72676caa75902e3d refs/tags/slow_dev

更新#0目录user_controlled_site_layoutsrefs/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_layouts3af84fcf1508c44013844dcd0998a14e61455034

更新git show 3af84fcf1508c44013844dcd0998a14e61455034

$ git show 3af84fcf1508c44013844dcd0998a14e61455034commit 3af84fcf1508c44013844dcd0998a14e61455034Author: 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.rbindex 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) dot.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"
1717282 次浏览
$ cat .git/refs/heads/feature/user_controlled_site_layouts3af84fcf1508c44013844dcd0998a14e61455034

您能否确认以下工作:

$ git show 3af84fcf1508c44013844dcd0998a14e61455034

可能是有人重写了历史,并且此提交不再存在(无论出于什么原因)。

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

git checkout feature/foo

在过去,为了避免这个错误,我不得不

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

我也不知道我做了什么让自己陷入那种境地。

尝试git fetch,以便您的本地存储库从Github获取所有新信息。它只接受有关新分支的信息而没有实际代码。之后,git checkout应该可以正常工作。

你基本上看到了分支,但你还没有本地副本!

您可以简单地获取然后签出到分支,使用下面的命令执行此操作:

git fetchgit checkout <Branch name here>

我还创建了下面的图片,供您分享差异,看看获取是如何工作的,以及拉取的不同之处:

在此处输入图片描述

我在git-bash上得到了同样的pathspec error。我在Windows上使用Tortoise git来切换/签出分支。

我有同样的问题…我以为我有分支命名为foo当我尝试:

git checkout foo

我得到了:

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

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

git checkout feature/foo

然后为我工作。

如果您删除了git branch -D yourbranchname的分支并再次提取/克隆您的repo,您可能需要再次创建本地分支。

尝试:

git checkout -b yourbranchname

Git Windows用户要小心-没有--icase-pathspecsGIT_ICASE_PATHSPECS = 1环境变量设置,git路径规范将区分大小写,在这种情况下

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

并不等同于

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

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

当这种情况发生时,我丢弃所有受影响的repos,从上游重新克隆它们,并使用'git format-patch'/'git am'将任何半成品从旧世界转移到新世界。

我遇到了类似的问题。导致我陷入困境的是:我有多个远程分支,我删除了包含代码的文件夹。我做了一个获取拉:

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.

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

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

然后我在将其链接到远程存储库之前更改了分支:

git checkout AAA

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

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

在这之后,我可以很容易地切换分支。虽然这不是一个标准的方法,但在我尝试了上述所有选项后,它对我有效。

当我做以下事情时,我得到了这个:

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

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

修复:

我在git扩展中打开了repo。我看到文件(使用旧名称)已暂存。但由于它不再存在,因此无法提交。

我只是取消了这个文件。

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

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

结果是我进错了仓库。所以吸取教训:在吓坏之前检查您正在查看哪个回购。

如果发生在Windows上,可能是文件名大小写问题。

我今天遇到了这个错误-我创建了新文件,添加到GIT,然后我将文件名中的一个字母从下到上更改,然后我无法进行任何操作-提交,恢复,从存储库中删除文件。

我找到的唯一解决方案是当我将此文件添加到GIT时再次将文件名更改回完全相同的大小写,然后执行GIT恢复以从GIT中删除此文件,然后根据需要再次更改文件名。在这些更改之后,我可以提交到repo,然后毫无问题地推送。

在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

然后问题就消失了

在我的例子中,我重命名了一个文件,改变了文件的大小写,即。SomeFile.js->someFile.js

我认为这与问题有关。做一个git获取并没有解决这个问题。

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

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

Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version (master)$ git log --format=onelineb9cc6a9078312865280fb5432a43e17eff03a5c6 Formatted README288772f36befe6bd60dd41b8185f1e24e0119668 Updated README documentationd2bdbe18f4169358d46fad50eacfb89786df3bf8 Version object v3.0.0-SNAPSHOTa46b1910a3f548b4fa254a6055d25f68d3f217dd VersionFactory is now Platform agnostic24179ae569ec7bd28311389c0a7a85ea7b4f9594 Added internal.Platform abstraction252b684417cf4edd71aed43a15da2c8a59c629a7 Added IPlugin implementation for Spongee3f8d21d6cf61ee4fc806791689c984c149b45e3 Added IPlugin implementation for Bukkitaeb403914310b4b10dee9e980cf64472e2bfda79 Refactored Version.javaef50efcff700c6438d57f70fac30846de2747a7e Refactored TesterFactorya20808065878d4d28657ae362235c837cfa8e625 Added IPlugin abstraction9712a3575a70060d7ecea8b62bb5e888fdc32d07 Heavily refactored Tester02d025788ae740dbfe3ef76a132cea8ca4e47467 Added generic Predicate<T> interface9c565777abea9be6767dfdab4ab94ed1173750dd Minor refactoring of testCompareTo()2ff2a28c221681e256dcff28770782736d3a796a Version object v2.0.1d4b2e2bd830f77cdbc2297112c2e46b6555d4393 Fix compareTo()05fe7e012b07d1a5b8de29804f96d9a6b24229a1 Make compareTo() fail6e85371414357a41c1fc0cec0e75adba92f96832 Fix VersionFactory passing nullc1fd1f032f87d860d5ed9d6f6679c9fa522cff8d Version object v2.062c3a92c008a2ed11f0a4d016080afc3541d0700 Version object v1.2c42e9e617128085e872c51b4d977a04e48d69e8f Deprecated, doc'd, future-proofed getNm

Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version (master)$ git checkout 3a796aerror: pathspec '3a796a' did not match any file(s) known to git.

我试图返回并为Version object v2.0.1构建提交。幸运的是,我有了尝试整个哈希代码的想法,它奏效了!这意味着我使用了错误的哈希代码结尾。

Nikolai@CALIGARI-7 ~/Documents/NetBeansProjects/Version (master)$ git checkout 2ff2aNote: checking out '2ff2a'.
You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you maydo 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...))$

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

当选择错误的存储库时,单击“从…更新”后,我在Github桌面上得到了这个。然后我将存储库更改为正确的存储库,但当我尝试删除更改时,我遇到了这个错误。那是因为这些是我错误选择的存储库中的新文件,而不是我想要更新的存储库中的新文件。

我只是将存储库选择器更改回我第一次错误选择的那个,然后我就可以删除更改。

然后我将repo选择器更改为我想要的。

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

  • git submodule init
  • git submodule update

因此,git链接到确实错过了该分支的父文件夹。

当我尝试签出新分支时,我遇到了这个错误:

错误:路径规范'BRANCH-NAME'与git已知的任何文件不匹配。

当我尝试git checkout origin/<BRANCH-NAME>时,我得到了分离的HEAD:

(脱离原产地/)

最后,我做了以下操作来解决这个问题

git remote updategit fetchgit checkout --track origin/<BRANCH-NAME>

我在Windows上使用Git时遇到了这个问题。在我的情况下,这是一个案例问题。我已经向我的存储库添加并提交了一个文件,后来只更改了它的大小写。为了解决这个问题,我重命名了文件以匹配原始案例,并使用git mv命令再次重命名。从表面上看,这让git可以跟踪重命名。

注意:我正在使用Cygwin。

在Windows OS上,默认情况下git安装为

core.ignorecase = true

这意味着git repo文件将不区分大小写,要改变这一点,您需要执行:

\yourLocalRepo> git config core.ignorecase false

您可以在. git\config文件中找到此配置

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

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

或者您可以通过在本地创建与您要签出的分支相同的文件夹来执行此操作。

例如:在本地创建文件夹foo,之后,使用Git命令:git branch --set-upstream-to=origin/foo foo,仅此而已。使用git pull获取代码。

这也发生在我自己创建的两个本地分支的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。

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

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

做一个完成的git clone将修复它。

一个可能的原因是,如果您正在使用MINGW*windows机器

ISSUE

在解析命令时从分支名称中检查要签出的分支名称。Windows省略字符'

例如:如果您有像bugfix/some-'branch'-name这样的分支名称

当你发出命令:> git checkout bugfix/some-'branch'-name时,它会将其解析为bugfix/some-branch-name,注意它省略了'字符。

REMEDY

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

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

它应该工作然后!

在我的情况下,我有两个分支1)master(用于实时服务器)2)dev(测试服务器)。我在各自的服务器上设置了多个远程推送代码。当我尝试切换分支时,我遇到了像error: pathspec 'master' did not match any file(s) known to git.这样的错误

您可以通过git remote -v看到它们。我删除了其他遥控器,除了git remote remove <remote-name>origin遥控器

然后git fetch

现在我可以通过git checkout <branch-name>结帐分支。

当我第一次使用git时,我遇到了同样的问题。在尝试我的第一次提交时…

git commit -m 'first commit!'

我得到了OP提到的错误…

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

我想我可能在提交消息中使用关键字混淆了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 reset --hard

我犯了一个愚蠢的错误,在提交时没有提供-m标志(lol发生)

git commit -m "commit message in here"

由于您的功能分支存在于远程,因此您的本地存储库已损坏。因此,删除您的本地存储库并重新克隆。现在'git checkout <branch_name>'应该适合您。

如果分支名称和您没有任何未提交的文件,那么试试这个

git fetch && git checkout <branch name>

如果你在Windows上,你可能只是将文件名更改为小写/大写,如File.txt-file.txt

所以检查你在git中有什么文件并将其重命名为你想要的:

git status

然后我需要file.txt->但是git状态给了我File.txt所以重命名它

git mv File.txt file.txt

问题就解决了。

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

所以现在,我可能不确定这种情况是如何发生的,至少我们可以解决它:

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

git配置remote.origin.fetch

+引用/头/private_dev_branch:引用/远程/起源/private_dev_branch

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

$git configremote.origin.fetch"+refs/head/*: refs/Remote tes/*"####获取当前目录下的文件列表。

git配置remote.origin.fetch

+refs/头/*: refs/远程/起源/*

然后,您可以尝试“git拉取”(也许“git获取起源”也可以,但我没有尝试)来获取所有分支。

我就是这样解决我的错误的!

首先,我在本地删除了我的repo,也从我的Github中删除了。然后我分叉并克隆到我的本地存储库。

在那之后,我做了我的改变,最后

创建我的分支

$git checkout -b moh_branch

变更工作分支

$git checkout moh_branch

将分支推送到GitHub

$git push origin moh_branch

之后,我可以提交我的更改如下:-

$git add .

$git commit -m "updated readme.md"

$git push origin moh_branch

100%成功了!!!

我也遇到了同样的问题(使用git最近的版本),并发现它与git使用的颜色转义码有关。我想知道这是否可以解释为什么这个问题如此普遍。

这演示了可能发生的事情,尽管颜色通常是在git配置中设置的,而不是在命令行中设置的(否则它的效果会很明显):

~/dev/trunk (master)$ git checkout `git branch -l  --color=always  | grep django-1.11`error: pathspec 'django-1.11' did not match any file(s) known to git.~/dev/trunk (master)$ git branch -l  --color=always  | grep django-1.11django-1.11~/dev/trunk (master)$ git checkout `git branch -l  | grep django-1.11`Switched to branch 'django-1.11'Your branch is up-to-date with 'gerrit/django-1.11'.~/dev/trunk (django-1.11)$

我想一个不使用颜色设置的git配置应该可以工作颜色=自动应该做正确的事情。我的特别问题是因为我使用的git recent被定义为具有硬编码颜色的别名,我试图在其上构建命令

首先签出父分支然后键入

git fetch --all --prunegit checkout <your branch>

希望有帮助!

git pull

这对我来说很简单:)

对我来说,这是我的证书的问题


在尝试了一些答案后,其中一个帮助我解决了这个问题:

运行git fetch抛出以下错误:

无法解析主机:bitbucket.org

我所要做的就是强制我的IDE(在我的情况下是VS Code)记住我的凭据:

git config --global credential.helper wincred

Git立即同步了所有更改,现在git checkout <branche>工作正常!

好吧,已经有太多的答案了。但是在我的案例中,当我在Eclipse上工作并使用git-bash在分支/签出之间切换时,我遇到了这个问题。一旦我关闭了eclipse并重新启动了git-bash to签出分支,一切都很好。

因此,我建议您仔细检查您的存储库是否未被另一个应用程序使用。

我从另一个.git/config文件复制了远程源url,这样我的新.git/config文件在[remote "origin"]部分的以下行中丢失了

fetch = +refs/heads/*:refs/remotes/origin/*

添加上面的行固定error: pathspec 'master' did not match any file(s) known to git.

我有不同的根本原因

我有一个脚本,基本上搜索所有分支中“PRJ-1234”中匹配jira问题键的所有分支,在匹配的分支上执行git分支检出命令

在我的情况下,问题是2个或多个分支共享相同的jira键,因此导致我的脚本失败并出现上述错误

通过删除旧的未使用分支并确保只有一个分支具有jira键引用来修复问题

这是我的代码以防有人想使用它

git remote updategit fetch --all --prunegit branch -r --list *$1* | xargs git checkout --force

保存为switchbranch.sh

然后从终端./switchbranch.sh PRJ-1234使用它

我通过修改我的git配置文件修复了它检查您的git目录中的配置文件-.git\config

它以前有

[remote "origin"]url = http://git.xyz.com/abc-group/pqr.gitfetch = +refs/heads/develop:refs/remotes/origin/develop

我通过修改它来修复

[remote "origin"]url = http://git.xyz.com/abc-group/pqr.gitfetch = +refs/heads/*:refs/remotes/origin/*

注意头只指向一个分支,所以它找不到对其他现有分支的引用,我把它改成了*,所以它检查所有的起源。

我在切换分支时遇到了这个问题。

我在当前分支上做了一个git拉,然后尝试签出新的分支,它起作用了

在你的旧分支上拉取//git检查

我也犯了同样的错误因为我正在检查不存在的分支。所以我们需要确保我们正在检查的分支存在于存储库中。

我得到这个错误时,试图通过结帐分支:

git checkout branchX

我以前没有检查过。它只在显式声明远程时起作用:

git checkout --track origin/branchX

这样做的原因是,我在git config中配置了2个不同的遥控器(起源+其他)。由于我不需要第二个遥控器,我删除了它,瞧,它起作用了。通过以下方式设置默认遥控器的替代方法:

checkout.defaultRemote=origin

对我不起作用

检查目标文件名中是否没有打字错误。我试图通过键入来阶段

git add includes/connection..php

但是我没有注意到我用了两个点然后我输入

git add includes/connection.php

它起作用了

三个步骤

  1. 写一个命令“git get”
  2. 然后您将看到所需的分支,然后切换到相关分支'git check out'your_branch_name
  3. 然后写一个命令'git拉原点your_desired_branch_name'

我的一个分支也有同样的问题。

这些命令为我工作。

git fetch --allgit checkout <branch-name>

当我尝试使用特定标签结帐时,我遇到了这个问题,但标签值不正确。这是一个多么容易的例子:

git@github.com:user/reponame?ref=1.0.0

这是不正确的,下面是正确的(版本名称前的注释v):

git@github.com:user/reponame?ref=v1.0.0

如果你不熟悉所有这些小细节,很容易忽略它们。

当您尝试获取本地git不知道的分支时,会出现这样的问题。首先

git remote add origin yourremotegitrepository

之后

git fetch //you should get all remote branches
git checkout branchname

仅此而已。

好吧,我有几个像dev/{feature_branch}这样被删除的分支,当我创建一个新的分支开发并尝试结帐时,我遇到了同样的问题。我运行了下面的命令

git fetch -p

为我工作。

我的特例有相同的错误:

git checkout mastererror: pathspec 'master' did not match any file(s) known to git

我的特例和我的特例解决方案:由于Git的“master”名称更新为“main”,因此新项目只能使用“main”。

git checkout main

当您与我没有相同的情况下,请不要使用。

我在这个问题上失去了理智,但后来我读了留档,意识到我的公司已经将他们的存储库拆分为多个遥控器,所以一些分支将位于主遥控器上,而另一些则需要您从不同的遥控器获取。

检查您尝试签出的存储库是一个远程还是多个远程

最近当我尝试用下面的命令结帐到我的主分支时,确实发生了这个错误。

git检出主机

由于Github已将命名约定从#0更改为#1,上述命令会给你错误。因此,您可以使用以下命令来代替。

git checkout main

做一个git fetch origin <branchName>:<branchName>

这将获取并创建相同的本地副本,因此现在您可以

检查到它git checkout <branchName>

此问题的一个可能原因可能是本地存储库与其上游存储库之间缺乏同步。在这种情况下,简单的git pull upstream <branch_name>后跟git checkout <branch_name>就可以解决问题。

更好/更简单的:

git fetch origin yourLocalBranch:yourLocalBranchgit checkout yourLocalBranch

当我浅克隆一个仓库时,我得到了这个错误,并得到了一个解决方案例如,我要签出的分支是释放/120

git ls-remote origin release/120 # make sure the remote branch exitsgit fetch origin refs/heads/release/120:refs/remotes/origin/release/120 # fetch to local repogit co -b release/120 origin/release/120 # checkout to workspace

尝试了所有推荐的解决方案,但在我的情况下不起作用,所以我删除了git repo并再次添加。解决了所有问题。

git remote remove origingit remote add origin git@bitbucket.org:org_name/project_name.git