git rm --cached不起作用

5
我一直试图从git版本控制系统中删除一些文件,以便它们不会被推送到提交中。但是对于几个文件,无论是“git rm --cached filename”还是“git rm --force --cached filename”,都无法生效。基本上,已删除的文件会被推送到github(仅当我更改其他文件并提交项目时才会这样)。此外,对于一些文件,当我使用git rm命令时,会出现“致命错误:路径规范与任何文件不匹配”的错误,尽管这些文件确实存在于路径中。这里出了一些问题,但我不知道如何安全地重置所有内容。能否请您帮忙解决?

1
你可能对 Git 的工作方式感到有些困惑。当你删除文件并进行推送时,这应该会导致它们从远程仓库中被删除。当然,这些文件依然存在于历史记录中,因为它们曾经存在过。 - Tim Biegeleisen
3个回答

3
从索引中删除文件是不够的。您还必须从该索引中创建提交到您所在的分支,然后将其推送到要出现此更改的远程存储库。如果只执行“git rm ...”和“git push”而没有提交,则会忽略这些删除操作。
当您执行“git rm --cached”时,文件已从索引中删除,但仍留存在工作树中。
如果运行“git diff”,则看不到任何内容:因为它正在比较工作树和分支末端之间的差异。要查看暂存区域的删除操作,请使用“git diff --cached”。这是分支末端和索引之间的差异。下一次调用“git commit”时,会提交这些差异。
只有在提交其他文件时才会提交您的删除操作,因为提交对于删除操作是必要的。当您进行其他更改并提交这些更改时,这些提交会获取先前暂存的删除操作。
如果您意外地将一个与编辑文件“y”相结合的离题文件“x”的删除组合在同一个提交中,您可以使用“git reset HEAD^ -- x”来创建一个撤消“x”的删除操作的暂存区域。然后提交它。或者如果您尚未发布错误提交,则可以使用“commit --amend”。现在,修改后的提交仅包含“y”的编辑内容,“x”再次成为被跟踪的文件。现在,使用“rm --cached x”重新执行删除操作,并为此创建一个新的提交。

1
在项目根目录的.gitignore文件中添加文件路径。

这会导致更多的混淆,因为文件已经存在于文件中,有时候你以后无法修改。所以,这很重要。 - titusfx

-1
尝试使用以下命令:
  1. git reset filename

  2. git reset HEAD filename

它们将从暂存区中移除文件。

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