撤销 git rm -r --cached

63

我的 .gitignore 文件没有起作用,所以我按照这个问题的建议进行操作。

现在我有一堆需要提交的文件,为了继续操作。我犯了一个错误,把这些文件提交了,因为我找不到摆脱它们的方法。

有没有办法撤销所有这些操作?我不能执行 reset,因为我会得到错误提示:error: The following untracked working tree files would be overwritten by checkout

愚蠢的错误,我找不到解决方法。


1
为什么不执行 git checkout . 呢? - Daniel A. White
我已经提交了这些更改,所以在执行rm -r cached之后,我执行了git add,然后进行了提交。现在我无法删除该提交,因为出现了错误。 - Ned
git reset HEAD --soft ? - AgileDan
5个回答

129
如果你只运行了git rm -r --cached命令,请尝试在你的repo根目录下执行git reset HEAD .命令。
如果你在运行git rm -r --cached命令后执行了git commit -m "msg",也就是说你已经提交了更改,请执行git reset HEAD~1命令来撤销你最后一次提交

我做不到,无论我尝试使用git checkout、git reset或其他方法,都会收到来自上面的消息。 - Ned
1
@Ned,你能否更新你的问题,包括你运行的确切命令和完整的错误信息?我尝试了你所说的场景,它对我有效,所以你的命令可能有所不同。 - Anshul Goyal
实际上不是这样的,我不得不将我的项目克隆到另一个文件夹中,并从头开始。可能是我在那些文件中弄错了什么,但现在不确定。然而,你的答案是正确的,对于其他情况应该也有效,我的情况可能因为其他原因而不同,我会接受你的答案,以便它可以帮助其他人。谢谢! - Ned
以防万一有人遇到这个问题,@mu無提供的解决方案对我有效,也许对你也有用。 - Farhat Nawaz

10

Git基于文件缓存工作,因此如果您从缓存中删除了所有内容,则只需执行以下操作即可完全反转该过程。这将重新添加正在被跟踪的文件,并告诉哪些文件自上次提交以来已被修改。

> git add . 

这并没有重新跟踪我的未跟踪文件。 - Mike W
mu 無的回答是最佳答案,因为它完全从历史记录中删除了缓存文件。请忽略此答案,您可能还想在问题中添加一个新问题。 - big kev
我之前将一些属性文件推送到 git 上,然后后来想要将其添加到 .gitignore 文件中,所以我添加了它并执行了 git rm -r --cached . 命令。我运行了 git status,发现它删除了其他文件和我的 prop 文件。但是之后我执行了 git add . 命令,只是为 prop 文件暂存了删除操作。 - Arpan Banerjee
加分给 git add,我收到了信息 提示:如果你真的想添加它们,请使用 -f。 我这样做了,结果有效。 - Timo

7
如果您希望 Git 让您的文件重新跟踪,即使这些文件曾被 .gitignore 或其他方式移除过,请按照以下步骤操作:
git rm --cached

你可以通过以下方式实现:

git add -f <files>

然后,如果你想要从暂存区中移除文件,可以使用以下命令:

git restore --staged <files>

2
如果您只想撤销特定文件的更改,可以执行以下操作:git restore --staged <file>

1

如果文件已从缓存中删除,则运行git checkout HEAD path/to/file将无法起作用。

对我来说有效的方法是通过运行以下命令移动到新分支:

git checkout -b newBranch

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