Git RM - 致命:路径规范未匹配任何文件



我意外地将 9000 多张照片添加到我的项目文件夹中。并承诺了他们。然后将它们从磁盘中删除。承诺。

现在我尝试将更改推送到 git 服务器。但是它花费的时间太长,并尝试发送 12 Gb 的数据。

我检查了磁盘上的文件大小,发现实际上.git文件夹需要 12 Gb。

如何从那里删除照片?我尝试了git rm,但失败了:

❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files

因为我都准备好从磁盘中删除了它们,但它们仍在.git文件夹中。

我试图将public/photos添加到.gitignore

public/photos/
*.zip

但没有结果。当然,我可以hard reset head到我的项目中没有那么多垃圾照片的时刻。但从那时起,我承诺了很多次,并对代码进行了大量更改。

在您的情况下,请使用 git filter-branch 而不是 git rm

git rm将删除文件,因为它们将不再被 git 跟踪,但这不会删除与这些图像对应的旧提交对象,因此您仍然会坚持推送对应于 12GB 图像的早期提交。

另一方面,git filter-branch也可以从所有以前的提交中删除这些文件,从而消除了推送任何文件的需要。

  1. 使用命令

    git filter-branch --force --index-filter 
      'git rm -r --cached --ignore-unmatch public/photos' 
      --prune-empty --tag-name-filter cat -- --all
    
  2. 筛选器分支完成后,验证没有意外文件丢失。

  3. 现在添加一个 .gitignore 规则

    echo public/photos >> .gitignore
    git add .gitignore && git commit -m "ignore rule for photos"
    
  4. 现在做一个推送

    git push -f origin branch
    

检查这个,这个和这个以获得进一步的帮助。为了更安全起见,我建议您在继续执行这些说明之前在系统上创建存储库的备份副本。

至于您的原始错误消息,发生这种情况是因为您已经使用 git rm 取消跟踪它们,因此 git 抱怨因为它无法删除它没有跟踪的文件。在此处阅读有关此内容的更多信息。

一个非常简单的答案是。

第 1 步:

首先添加要删除的未跟踪文件:

使用 git add .git add <filename>

第 2 步:

然后使用命令轻松删除它们git rm -f <filename>此处 rm=remove 和 -f=forcely。

步骤 1

将文件名添加到.gitignore文件中。

步骤 2

git filter-branch --force --index-filter 
    'git rm -r --cached --ignore-unmatch YOURFILE' 
    --prune-empty --tag-name-filter cat -- --all

步骤 3

git push -f origin branch

非常感谢@mu。

要从 git 中删除跟踪的和旧的提交文件,您可以使用以下命令。就我而言,我想取消跟踪并从目录中删除dist所有文件。

git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch dist' --tag-name-filter cat -- --all

然后,您需要将其添加到.gitignore中,以便不会进一步跟踪它。

使用它对我有用

git rm -f --cached <filename>

有时当您不跟踪文件时会发生这种情况,使用 git add untracked file name 添加文件,之后只需git rm -r file name

git stash 

做了这项工作,它恢复了我使用 rm 而不是 git rm 删除的文件。

我首先结帐了最后一个哈希值,但我认为这不是必需的。

这个链在我的情况下有效:

  1. git rm -r WebApplication/packages

有一个确认 git 对话框。您应该选择"y"选项。

  1. git commit -m "blabla"
  2. git push -f origin <ur_branch>

仅供参考,我注意到我有一些权限为 000 的文件,也许它们是使用 sudo 创建的,我不知道,但是将您的权限更改为 644 后(我需要 sudo 进行此操作(,问题就解决了

sudo chmod 644 vendor/symfony/yaml

和提交结果:

diff --git a/vendor/symfony/yaml b/vendor/symfony/yaml
deleted file mode 160000
index 212a27b7..00000000
--- a/vendor/symfony/yaml
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 212a27b731e5bfb735679d1ffaac82bd6a1dc996
diff --git a/vendor/symfony/yaml b/vendor/symfony/yaml
new file mode 100644
index 00000000..20a0b9d0
--- /dev/null
+++ b/vendor/symfony/yaml
@@ -0,0 +1 @@
+Subproject commit 212a27b731e5bfb735679d1ffaac82bd6a1dc996
我想

删除缓存的目录node_modules时遇到了同样的错误。

而不是
git rm -r -f --cached node_modules 我不得不使用
git rm -r -f --cached **/node_modules,因为目录不是根目录的一部分。

当我中止上传时,我遇到了这个错误,这需要很长时间,为了修复它,我重命名了文件,提交,重命名回来,提交。

我在以下错误消息中遇到了类似的问题(谷歌把我带到了这里(:

error: pathspec 'elements (conflicted copy 2013-08-06)' did not match any file(s) known to git

尝试了此处描述的所有解决方案,但没有一个对我有用。我有两个文件根本不存在了,但 git 仍然向我显示这些文件,无法删除它们。由于与Dropbox的冲突,它们被创建。

对我有用的步骤:

  1. git stash

这导致文件夹中再次存在两个文件

  1. 将文件重命名为其他名称

Git 现在会将重命名的文件显示为未跟踪,但旧文件仍显示为已删除

未为提交暂存的更改:(使用"git add/rm ..."进行更新将提交的内容((使用"git restore ..."丢弃工作目录中的更改(
删除:"元素(冲突副本 2013-08-06(">
删除:"布局(冲突副本 2013-08-06(">

未跟踪的文件:(使用"git add ...",以包含在将要包含的内容中已提交(
elements_dupelayout_dupe

  1. git add -A

突然,显示 git 状态,以前的文件已重命名

要提交的更改:(使用"git restore --staged ..."取消舞台(

重命名:"元素(冲突副本 2013-08-06(" -> elements_dupe重命名:"布局(冲突副本 2013-08-06(" -> layout_dupe

  1. git commit -m 'renamed duplicate files'

之后,只需删除文件并再次提交即可轻松删除它们。

我有一个重复的目录(~web/web(,当我在第一个web文件夹中运行时rm -rf web它删除了嵌套的副本。

相关内容

最新更新