我不确定为什么我无法结帐我之前曾参与过的分支机构。请参阅以下命令(注意:co
是checkout
的别名):
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上找到任何我能理解的内容。
如何查看该分支,以及我可以采取哪些措施来解决这个问题?
更新:
我找到了this 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"
答案 0 :(得分:756)
尝试git fetch
,以便本地存储库从github获取所有新信息。它只是获取有关新分支的信息而没有实际代码。之后git checkout
应该可以正常工作。
答案 1 :(得分:282)
当我尝试检查新分支时,我收到了此错误:
错误:pathspec&#39; BRANCH-NAME&#39;与git已知的任何文件都不匹配。
当我尝试git checkout origin/<BRANCH-NAME>
时,我得到了分离的HEAD:
(脱离原产地/)
最后,我执行了以下操作来解决问题:
git remote update
git fetch
git checkout --track origin/<BRANCH-NAME>
答案 2 :(得分:140)
我收到了一个远程分支并且没有本地跟踪分支的错误。即使我确定我已经通过一个简单的
检查了远程分支git checkout feature/foo
在过去,为了解决这个错误,我不得不
git checkout -t -b feature/foo origin/feature/foo
我不知道我做了什么让自己陷入这种状况。
答案 3 :(得分:75)
如果您删除了git branch -D yourbranchname
的分支并再次拉回/克隆了您的仓库,则可能需要再次创建本地分支。
尝试:
git checkout -b yourbranchname
答案 4 :(得分:31)
我有同样的问题,并从此链接获得了一些信息:git fetch doesn't fetch all branches
所以现在,我可能不确定这种情况是如何发生的,至少我们可以解决它:
第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”也可以,但我没有尝试)获得所有分支。
答案 5 :(得分:24)
Git Windows用户要注意 - 如果没有--icase-pathspecs
或GIT_ICASE_PATHSPECS = 1
env var setting,git pathspecs将区分大小写,在这种情况下
git checkout origin/FooBranch "Some/Path/To/File.txt"
与
不同git checkout origin/FooBranch "some/path/to/file.Txt"
答案 6 :(得分:19)
如果分支名称并且您没有任何未提交的文件,请尝试此
git fetch && git checkout <branch name>
答案 7 :(得分:13)
index1
那只是为我解决了问题:)
答案 8 :(得分:12)
我的一个分支机构也遇到同样的问题。
这些命令对我有用。
git fetch --all
git checkout <branch-name>
答案 9 :(得分:12)
当我做以下事情时,我得到了这个:
当我尝试检查目录时,出现此错误。
修复:
我在git扩展中打开了repo。我看到该文件(旧名称)已上演。但由于它不再存在,它无法承诺。
我只是取消暂存此文件。
然后我将文件(这次正确命名)重新添加到git中并且没有错误地提交。
答案 10 :(得分:8)
我遇到了同样的问题,因为我使用git clone --depth=1
,这意味着--single-branch
。
完成git clone
是否会解决问题。
答案 11 :(得分:8)
我今天遇到了这个问题,我试图git checkout foo
并获得error: pathspec 'foo' did not match any file(s) known to git.
事实证明我在错误的回购。所以吸取的教训是:在确定之前检查你正在看哪个回购。
答案 12 :(得分:7)
首先,检出父分支。然后输入
git fetch --all --prune
git checkout <your branch>
希望有帮助!。
答案 13 :(得分:7)
在Windows操作系统上,默认情况下,git使用
进行安装core.ignorecase = true
这意味着git repo文件将不区分大小写,要更改此项,您需要执行:
\yourLocalRepo> git config core.ignorecase false
您可以在 .git \ config 文件
上找到此配置答案 14 :(得分:5)
如果它在Windows上发生,则可能是文件名案例问题。
我今天遇到了这个错误 - 我已经创建了新文件,添加到GIT,然后我将文件名中的一个字母从低到高更改为然后我无法做任何事情 - 提交,还原,删除文件来自回购。
我找到的唯一解决方案是在将此文件添加到GIT时再次将文件名再次更改为完全相同的情况,然后执行GIT还原以从GIT中删除此文件,然后根据需要再次更改文件名。在这些变化之后,我可以承诺回购,然后毫无问题地推送。
答案 15 :(得分:5)
三个步骤
答案 16 :(得分:5)
在我的情况下,我有两个分支1)master(用于实时服务器)2)dev(测试服务器)。我在各自的服务器上设置了多个远程推送代码。当我尝试切换分支时,我得到了error: pathspec 'master' did not match any file(s) known to git.
您可以git remote -v
看到它们。
我已经通过origin
git remote remove <remote-name>
遥控器以外的其他遥控器
然后git fetch
现在我可以通过git checkout <branch-name>
结帐分行。
答案 17 :(得分:4)
在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
问题已经消失了
答案 18 :(得分:4)
我从另一个url
文件中复制了远程源.git/config
,这样做是因为我的新.git/config
文件在[remote "origin"]
部分的以下行中丢失了
fetch = +refs/heads/*:refs/remotes/origin/*
在固定error: pathspec 'master' did not match any file(s) known to git.
行上方添加
答案 19 :(得分:4)
我有同样的问题..当我尝试:
时,我以为我有一个名为foo
的分支
git checkout foo
我得到了:
error: pathspec 'foo' did not match any file(s) known to git.
然后我尝试了完整的分支名称:
git checkout feature/foo
然后为我工作。
答案 20 :(得分:4)
好吧,我几乎没有删除过的分支,例如 dev / {feature_branch} ,当我创建新分支 dev 并尝试签出时,遇到了同样的问题。我运行了以下命令
git fetch -p
为我工作。
答案 21 :(得分:3)
我犯了一个愚蠢的错误,即在提交时不提供-m标志(lol发生)
git commit -m "commit message in here"
答案 22 :(得分:3)
当我第一次玩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
答案 23 :(得分:3)
在我的情况下,我重命名了一个改变文件大小写的文件,即 SomeFile.js - &gt; someFile.js
我认为这与问题有关。执行git fetch并没有解决问题。
我将文件从我的项目中移出,进行了一次获取,并在没有它们的情况下进行了推送。然后我做了一个抓取,把它们添加回来,然后做了一个推动,它起作用了。我不知道是否需要所有这些步骤,但最终确实有效。
答案 24 :(得分:3)
在我的情况下,我没有进入
进入子模块目录git submodule init
git submodule update
因此git链接到确实错过了该分支的父文件夹。
答案 25 :(得分:3)
这些答案都没有解决我的问题:
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.
我试图返回并为Version 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...))
$
如上所示,对于部分哈希码,您必须提供前端而不是后端。
答案 26 :(得分:2)
我对这个问题失去了理智,但后来我阅读了文档并意识到我的公司已将他们的 repo 拆分为多个遥控器,因此某些分支将位于主遥控器上,而其他分支则需要您从另一个遥控器。
检查您尝试结帐的存储库是否有一个远程或多个
答案 27 :(得分:2)
我有一个根本原因
我有一个脚本,该脚本基本上在所有分支中的所有与jira issue key相匹配的分支中搜索“ PRJ-1234”,以检查该分支
在我的情况下,问题是2个分支共享相同的jira密钥,并导致其失败
通过删除分支之一,此问题已解决
这是我的代码,以防有人使用
git remote update
git fetch --all --prune
git branch -r --list *$1* | xargs git checkout --force
另存为switchbranch.sh
然后从终端./switchbranch.sh PRJ-1234
答案 28 :(得分:2)
对我来说,我的凭据有问题
尝试了一些答案后,其中一个帮助我解决了问题:
运行git fetch
时出现以下错误:
无法解析主机:bitbucket.org
我要做的就是强迫我的IDE(在我的情况下为VS代码)记住我的凭据:
git config --global credential.helper wincred
Git立即同步所有更改,git checkout <branche>
现在可以正常工作!
答案 29 :(得分:1)
好的,已经有太多答案了。但是就我而言,在Eclipse上并使用git-bash在分支/签出之间切换时,我遇到了这个问题。当我关闭月食并重新启动git-bash来检出分支时,一切正常。
因此,我建议您仔细检查存储库是否未被其他应用程序使用。
答案 30 :(得分:1)
我在git-bash上得到了同样的pathspec error
。我在Windows上使用Tortoise git切换/签出分支。
答案 31 :(得分:1)
当上游重写历史记录时,可能会导致这种情况。
当发生这种情况时,我抛弃所有受影响的回购,从上游克隆它们,并使用“git format-patch&#39; /&#39; git am&#39;将任何正在进行的工作从旧世界运送到新世界。
答案 32 :(得分:1)
我遇到了类似的问题。让我陷入困境的原因是: 我有多个远程分支,我删除了具有代码的文件夹。 我拉了一下。 :
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......
在此之后我可以轻松切换分支。 虽然这不是一种标准方式,但在我尝试了以上所有选项之后它对我有用。
答案 33 :(得分:1)
尝试通过以下方式签出分支时出现此错误:
git checkout branchX
我以前没有签出。 仅在明确说明遥控器时有效:
git checkout --track origin/branchX
这样做的原因是,我在git config中配置了2个不同的遥控器(起源+其他)。由于我不需要第二个遥控器,因此将其删除并打开,它就可以了。通过以下方式设置默认遥控器的替代方法:
checkout.defaultRemote=origin
对我不起作用
答案 34 :(得分:1)
我通过修改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/*
请注意,头部仅指向一个分支,因此找不到对其他现有分支的引用,我将其更改为*,以便检查源中的所有内容。
答案 35 :(得分:1)
我的情况我在“git branch ...:”之前运行“git fetch”,但是得到了同样的错误。 然后我分析了它并且在我的分支名称中找到了错误。修复它并成功切换到分支。
答案 36 :(得分:1)
上次我遇到了这个问题,我所做的就是删除与该分支相关的文件夹(或源代码)。
Ex:分支origin / foo在你的本地创建文件夹foo,所以我只是删除它并使用git fetch $ checkout
从远程获取代码。
或者您可以通过创建与您要结帐的分支相同的本地文件夹来实现。
Ex:在本地创建文件夹foo,然后使用Git命令:git branch --set-upstream-to=origin/foo foo
,全部。使用git pull
获取代码。
答案 37 :(得分:1)
一个可能的原因,如果您使用 MINGW *
处理 Windows 计算机ISSUE
检查要检出的分支名称。解析命令时,从分支名称中忽略字符 '
。
例如:如果您有一个分支名称,如bugfix/some-'branch'-name
当您发出命令:> git checkout bugfix/some-'branch'-name
时,它会将其解析为bugfix/some-branch-name
,请注意它忽略了'
个字符。
REMEDY
要在签发命令时签出此类分支名称添加转义字符。
输入:> git checkout bugfix/some-\'branch\'-name
它应该工作!!
答案 38 :(得分:1)
在Windows上使用Git时出现此问题。就我而言,这是一个案例问题。
我已经添加了一个文件并将其提交到我的存储库,后来只改变了它的情况。
为了解决这个问题,我重命名了文件以匹配原始案例,并使用git mv
命令重新命名。显然,这可以让git跟踪重命名。
注意:我使用的是Cygwin。
答案 39 :(得分:0)
我在切换分支机构时遇到了问题。
我在当前分支上做了一个git pull,然后尝试签出新分支,并且它起作用了
git pull // on your old branch
git checkout <new_branch>
答案 40 :(得分:0)
我遇到了相同的错误,因为我正在签出不存在的分支。因此,我们需要确保要检出的分支存在于存储库中。
答案 41 :(得分:0)
当选择了错误的回购时,点击“从......更新”后,我在Github桌面上找到了这个。然后我将repo更改为正确的,但是当我尝试删除更改时,我收到了此错误。那是因为这些是我错误选择的回购中的新文件,但不在我想要更新的文件中。
我只是将回购选择器更改回第一次错误选择的回购选择器,然后我就可以删除更改。
然后我将回购选择器更改为我想要的那个。
答案 42 :(得分:0)
检查目标文件名是否不是错字。我试图通过输入
登台git add includes/connection..php
但是我没有注意到我使用了两个点 但是然后我输入
git add includes/connection.php
有效
答案 43 :(得分:0)
$ cat .git/refs/heads/feature/user_controlled_site_layouts
3af84fcf1508c44013844dcd0998a14e61455034
您能否确认以下内容有效:
$ git show 3af84fcf1508c44013844dcd0998a14e61455034
可能是某人重写了历史记录并且此提交不再存在(无论出于何种原因)。
答案 44 :(得分:0)
当我尝试使用特定标签进行结帐时遇到了此问题,但标签值不正确。这是一个简单的例子:
git@github.com:user/reponame?ref=1.0.0
这是不正确的,下面是正确的(在版本名称前请注意v
)
git@github.com:user/reponame?ref=v1.0.0
如果您不熟悉所有这些细微的细节,可以很容易地忽略它们。
答案 45 :(得分:0)
当您尝试获取本地git不知道的分支时会出现这样的问题。 首先
git remote add origin yourremotegitrepository
之后
git fetch //you should get all remote branches
git checkout branchname
仅此而已。
答案 46 :(得分:-1)
在我自己创建的两个本地分支机构的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。
答案 47 :(得分:-1)
我遇到了同样的问题(使用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 recent
被定义为具有硬编码颜色的别名,并且我试图在此之上构建命令
答案 48 :(得分:-2)
以下是我解决错误的方法!
首先我在本地和我的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%!!
答案 49 :(得分:-2)
由于您的功能分支存在于远程,因此您的本地存储库已损坏。因此,删除您的本地仓库并重新克隆。现在'git checkout <branch_name>
'应该适合你。
答案 50 :(得分:-4)
如果您使用的是Windows,您可能只需将文件名更改为大写/小写,例如File.txt - file.txt
因此,请检查git中的文件,并将其重命名为您想要的文件:
git status
然后我需要file.txt - &gt;但是git status给了我File.txt所以只需重命名
git mv File.txt file.txt
问题解决了。
答案 51 :(得分:-4)
这对我有用。它会丢弃所有本地更改并将其重置为上次提交。
$ afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'
7:05:06:58
$
答案 52 :(得分:-4)
我的特殊情况有同样的错误:
git checkout master
error: pathspec 'master' did not match any file(s) known to git
我的特殊情况和我的特殊情况解决方案:由于 Git 的“master”名称更新为“main”,因此新项目只能使用“main”。
git checkout main
如果你没有和我一样的情况,请不要使用。