协慌网

登录 贡献 社区

git:撤消所有工作目录更改,包括新文件

如何删除工作目录中的所有更改,包括新的未跟踪文件。我知道git checkout -f ,但它不会删除自上次提交以来创建的新的未跟踪文件。

有人知道怎么做吗?

答案

git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

要查看之前将删除的内容,而不实际删除它,请使用-n标志(这基本上是一个测试运行)。当您准备好实际删除时,请删除-n标志:

git clean -nfd

我经常使用的最安全的方法:

git clean -fd

根据/docs/git-clean页面的语法解释:

  • -f (别名: --force )。如果 Git 配置变量 clean.requireForce 未设置为 false,则 git clean 将拒绝删除文件或目录,除非给定 - f,-n 或 - i。除非给出第二个 - f,否则 Git 将拒绝使用. git 子目录或文件删除目录。
  • -d 。除了未跟踪的文件之外,删除未跟踪的目录。如果未跟踪的目录由不同的 Git 存储库管理,则默认情况下不会删除它。如果您确实要删除此类目录,请使用 - f 选项两次。

正如评论中所提到的,最好做一个git clean -nd ,它会执行干运行并告诉你在实际删除它之前会删除什么。

链接到git clean doc 页面: https//git-scm.com/docs/git-clean

对于所有未暂存的文件,请使用:

git checkout -- .

.最后很重要。

你可以替换.使用子目录名称仅清除项目的特定子目录。 这里特别提到了这个问题。