有时候我们在使用了 git add
将我们的修改提交到本地暂存区中时,会忘记修改 .gitignore
文件,用以声明被add
子命令忽略的文件。这个时候我们就需要撤销刚才的 add
操作。下面的所有操作都不会影响你工作区中的内容
rm 子命令
git rm --cached <file>
从暂存区(index)中移除指定的文件,当保留工作目录中的文件。
- 它仅仅影响暂存区,不会删除你本地的文件
- 当你希望停止跟踪某个文件(例如,不小心添加到暂存区的敏感信息或临时文件),但又想在本地保留它时非常有用。之后你通常会将其添加到
.gitignore
文件中,以免将来再次被跟踪。 - 下一次提交将不会包含这个被移除的文件。
reset
将指定文件从暂存区中移除,使其回到未暂存的状态。工作目录中的文件保持不变。
git reset HEAD <file>
撤销暂存区所有文件(取消 git add
缓存的所有内容)
git reset HEAD .
- 与
git rm --cached
类似,它也只影响暂存区,不触及工作目录。 - 主要用于撤销
git add
操作,当你错误地将某些文件添加到暂存区,但希望保留本地修改,只是不提交它们时使用。 - 执行后,这些文件会显示在
git status
的 “Changes not staged for commit” 部分。
使用 git restore
命令
git restore --staged <file>
这是 git reset HEAD <file>
的替代命令,功能完全相同,都是将指定文件从暂存区移除,恢复到 HEAD(最近一次提交)的状体啊,但工作目录中的修改会保留。
- git restore 是 Git 2.23 版本引入的新命令,旨在提供更清晰和模块化的文件恢复功能。
git restore --staged
专门用于操作暂存区。 - 许多 Git 用户认为
git restore
在概念上比git reset
更容易理解,因为reset
的功能比较多,容易混淆。 - 本质上,对于从暂存区移除文件这个特定场景,
git reset HEAD <file>
和git restore --staged <file>
的效果是一样的。