导航

git 从暂存区中删除文件

发布时间:4 个月前 更新时间:4 months ago
git

有时候我们在使用了 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> 的效果是一样的。