Git状态显示文件已被删除,但Git rm命令显示错误:路径规范“......”未匹配任何文件。

3
我已经做过这个100次了。 我从一个目录中删除了一个文件,然后运行git status,看起来很好。
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    themes/custom/gitb/templates/views-view-field--field-overall-rating.tpl.php 
#

接下来我运行了git rm themes/custom/gitb/templates/views-view-field--field-overall-rating.tpl.php,但是收到了一个错误信息。

error: pathspec 'themes/custom/gitb/templates/views-view-field--field-overall-rating.tpl.php' did not match any file(s) known to git.

Git status了解这个文件,但是git rm不知道它的存在,因此也无法删除它。我陷入困境,该怎么解决呢?

3个回答

10
一个快速而简单的解决方案是将文件添加回去并使用。
git rm themes/custom/gitb/templates/views-view-field--field-overall-rating.tpl.php

要删除文件,使用git rm命令即可。该命令会从文件系统中删除该文件,所以你不需要(也一般不应该)手动删除文件。

编辑

更好的方法是让git注意到缺失的文件,可以使用以下命令:

git add -u

或者
git commit -a

git-add的文档中,这是-u选项的描述:
只匹配已经在索引中被跟踪的文件,而不是工作树中的文件。这意味着它永远不会将新文件加入暂存区,但它会将已跟踪文件的修改后的新内容暂存,并且如果工作树中相应的文件已被删除,则它将从索引中删除该文件。 这是git-commit-a选项的描述:
告诉命令自动暂存已被修改和删除的文件,但你没有告诉git的新文件不受影响。

触摸和删除并没有完全起作用,但是触摸、添加然后删除起作用了,非常感谢。我需要理解“工作树”和“索引”之间的区别。 - gitb
是的,也许“touch”技巧太幼稚了。我会从我的答案中删除它。 - Gabriele Petronella

1

git rm man page 描述了几种删除工作树中不再存在的文件的方法。

将来,使用 git rm 删除文件比单独删除文件更简单。


0

当您删除未使用git的git rm命令的文件和目录时,会出现此附加内容。

我做了 git stash

它恢复了我使用rm而不是git rm删除的文件。

事实上,我首先检出了最后一个哈希值,但我不认为这是必需的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接