我不确定为什么我不能签出我以前工作过的分支。参见下面的命令(注意:co是签出的别名):

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.

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

我如何签出该分支,以及我可能做了什么来打破它?

更新:

我找到了这篇文章,运行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文件夹中):

$ 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更新显示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"

$ cat .git/refs/heads/feature/user_controlled_site_layouts
3af84fcf1508c44013844dcd0998a14e61455034

你能否确认以下工作是否有效:

$ git show 3af84fcf1508c44013844dcd0998a14e61455034

可能是有人重写了历史,这个承诺不再存在了(无论出于什么原因)。


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

git checkout feature/foo

在过去,为了避免这个错误,我必须

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

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


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

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

你可以简单地获取然后签出分支,使用下面的命令来完成:

git fetch
git checkout <Branch name here>

我还创建了下面的图像,让你分享它们的区别,看看fetch是如何工作的,以及pull是如何不同的:


我在git-bash上得到了相同的路径规格错误。我在窗口上使用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-pathspecs或GIT_ICASE_PATHSPECS = 1 env var设置,Git路径specs将区分大小写,在这种情况下

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

不一样吗

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

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

当这种情况发生时,我抛出所有受影响的回购,从新上游克隆它们,并使用'git format-patch' / 'git am'将任何正在进行的工作从旧世界转移到新的世界。


我也遇到过类似的问题。让我陷入困境的是: 我有多个远程分支,我删除了包含代码的文件夹。 我做了一个get pull。:

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 pull:

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

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

git checkout AAA

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

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

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


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

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

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

修复:

我在git扩展中打开了repo。我看到该文件(使用旧名称)已被放置。但既然它已经不存在了,就不能立案。

我只是取消了这个文件。

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


我今天遇到了这个问题,我试图git签出foo并得到错误:pathspec 'foo'不匹配任何已知的git文件。

事实证明我进错了回购区。因此,我们得到的教训是:在惊慌失措之前,先检查一下你在看哪个回购。


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

我今天有这个错误-我创建了一个新文件,添加到GIT,然后我把文件名中的一个字母从下到上更改了,然后我什么都做不了-提交,恢复,从repo删除文件。

我找到的唯一解决方案是再次将文件名更改为与我将该文件添加到GIT时完全相同的情况,然后执行GIT还原以从GIT中删除该文件,然后根据我的需要再次更改文件名。在这些变化之后,我可以承诺回购,然后推送,没有任何问题。


发生在我重命名一个未提交的文件在Android工作室。

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=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.

我试图返回并构建版本对象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...))
$

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


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

我只是把回购选择器改回我第一次错误选择的那个,然后我就可以删除这些更改了。

然后我把回购选择器改为我想要的。


在我的情况下,我进入子模块目录没有做

Git子模块init Git子模块更新

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


当我试图签出新的分支时,我得到了这个错误:

错误:pathspec 'BRANCH-NAME'没有匹配git已知的任何文件。

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

(脱离原点/)

最后,我做了以下事情来解决这个问题:

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

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

注意:我使用的是Cygwin。


Windows操作系统默认安装git

core.ignorecase = true

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

\yourLocalRepo> git config core.ignorecase false

你可以在.git\config文件中找到这个配置


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

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

或者您可以通过在本地创建与您打算签出的分支相同的文件夹来实现。

例如:在本地创建文件夹foo,然后使用Git命令:Git branch——set-upstream-to=origin/foo foo,就是这样。使用git获取代码。


在我自己创建的两个本地分支上的Windows上也发生了这种情况。 一出分行,我就不能结帐了

bugfix_ # 303 _multiline_opmerkingen_not_displaying_correctly_in_viewer

也不

bugfix_339_hidden_fields_still_validated

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

当我尝试使用Git GUI时,我甚至根本无法看到分支。然而,当我使用Pycharms git工具时,我看到了这个:

因此,出于某种原因,窗口决定添加一些难以破译的字符到我的分支名称,这就是它没有工作的原因。在Pycharm中重命名分支达到了目的,所以我猜这也适用于其他ide。


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


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

做一个完整的git克隆将修复它。


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

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(测试服务器)。我已经在各自的服务器上设置了多个远程推送代码。当我尝试切换分支时,我得到了类似错误的错误:pathspec 'master'不匹配git已知的任何文件。

你可以通过git remote -v看到它们。 我已经删除了其他远程除原始远程由git远程删除<remote-name>

然后是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获取不获取所有分支

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

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

$ git配置——获取remote.origin.fetch + refs /头/ private_dev_branch: refs /遥控器/ / private_dev_branch起源

步骤2。改变“remote.origin。Fetch”来获取所有东西

$ git config remote.origin.fetch“+refs/heads/*:refs/remotes/origin/*” $ git配置——获取remote.origin.fetch + refs /头/ *:refs /遥控器/产地/ *

然后,你可以尝试“git pull”(也许“git fetch origin”也可以,但我没有尝试)来获取所有的分支。


下面是我如何解决我的错误!

首先,我删除了我的回购本地也从我的Github。然后我将其分叉并克隆到本地存储库。

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

使用以下命令创建我的分支

$git checkout -b moh_branch

变更工作分支

$git checkout moh_branch

将分支推到GitHub

$git push origin moh_branch

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

$git添加。

$git commit -m "updated readme.md"

$git push origin moh_branch

我100%成功了!!


我也遇到了同样的问题(git-recent的一个版本),发现这与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.11
  django-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配置不玩颜色设置应该工作color=auto应该做正确的事情。我的特殊问题是,我最近使用的git被定义为一个带有硬编码颜色的别名,我试图在此基础上构建命令


首先,签出父分支。然后输入

git fetch --all --prune 
git 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以结帐分支时,一切都工作得很好。

因此,我建议您仔细检查您的存储库是否正在被其他应用程序使用。


我从另一个.git/config文件复制了远程原始url,这样我的新.git/config文件在[远程“origin”]部分中缺少以下行

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

添加上面的行修正错误:路径规格'master'不匹配任何已知的git文件。


我有不同的根本原因

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

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

通过删除旧的未使用的分支,并确保只有一个分支拥有jira键引用,解决了这个问题

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

git remote update
git fetch --all --prune 
git 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.git
fetch = +refs/heads/develop:refs/remotes/origin/develop

我把它修改为

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

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


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

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

Git拉//在你的老树枝上 Git checkout <new_branch>


我得到了同样的错误,因为我签出了不存在的分支。因此,我们需要确保签出的分支存在于存储库中。


当我试图通过签出一个分支时,我得到了这个错误:

git checkout branchX

这是我以前没有看过的。 它只在显式地声明远程时起作用:

git checkout --track origin/branchX

这样做的原因是,我在git配置中配置了2个不同的远程(origin + something else)。因为我不需要第二个遥控器,所以我把它拿走了,找到了voilá,它工作了。设置默认远程的替代方法:

checkout.defaultRemote=origin

对我没用


检查目标文件名是否输入错误。我试图通过打字来演戏

git add includes/connection..php

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

git add includes/connection.php

它的工作原理


三个步骤

写一个命令'git fetch' 然后你会看到想要的分支,然后切换到相关的分支'git checkout 'your_branch_name' 然后写一个命令'git pull origin your_desired_branch_name'


我的一个分支机构也遇到了同样的问题。

这些命令对我很有用。

git fetch --all
git 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},当我创建一个新的分支dev并试图签出时,我得到了相同的问题。我运行下面的命令

git fetch -p

为我工作。


我的特殊情况有同样的错误:

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

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

git checkout main

如果你没有和我一样的箱子,请不要用。


我在这个问题上失去了理智,但后来我读了文档,意识到我的公司已经将他们的回购分割成多个遥控器,所以一些分支将在主遥控器上,而其他分支将要求你从不同的遥控器上获取。

检查您试图签出的回购是否有一个或多个远程


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

Git checkout master

由于Github已经将命名约定从master更改为main,上面的命令会给你错误。因此,您可以使用下面的命令来代替它。

git checkout main 

只需做一个git获取origin <branchName>:<branchName>。

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

checkout到它git checkout <branchName>


导致此问题的一个可能原因可能是本地存储库与其上游存储库之间也缺乏同步。在这种情况下,简单的git拉入<branch_name>,然后是git签出<branch_name>。


更好的/更简单的:

git fetch origin yourLocalBranch:yourLocalBranch
git checkout yourLocalBranch

我得到这个错误时,我浅克隆一个回购,并得到了一个解决方案 例如,我想要签出的分支是release/120

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

尝试了所有推荐的解决方案,但在我的情况下都不起作用,所以我删除了git回购并重新添加它。解决了所有问题。

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