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 -nd运行,并告诉您在实际删除之前要删除的内容。

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

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

git checkout -- .

.最后很重要。

您可以替换.带有子目录名称,以仅清除项目的特定子目录。这个问题在这里专门解决。

看一下git clean命令。

git-clean - 从工作树中删除未跟踪的文件

通过从当前目录开始递归删除不受版本控制的文件来清理工作树。

通常,仅删除 git 未知的文件,但是如果指定 - x 选项,也会删除忽略的文件。例如,这对于删除所有构建产品很有用。

以下作品:

git add -A .
git stash
git stash drop stash@{0}

请注意,这将同时丢弃您未上演的和已上演的本地更改。因此,在运行这些命令之前,您应该提交任何您想保留的内容。

一个典型的用例:到处移动了许多文件或目录,然后又想回到原始状态。

积分: https : //stackoverflow.com/a/52719/246724

您可以分两步执行此操作:

  1. 还原修改后的文件: git checkout -f
  2. 删除未跟踪的文件: git clean -fd

我以为是这样( 警告:以下内容清除所有内容

$ git reset --hard HEAD
$ git clean -fd

reset为撤消更改。在clean以除去任何未跟踪˚F尔斯和d irectories。

git reset --hard origin/{branchName}

它将删除所有未跟踪的文件。

git clean -i首先将向您显示要删除的项目,并在确认后继续。在处理不应意外删除的重要文件时,我发现这很有用。

请参阅git help clean以获取更多信息,包括一些其他有用的选项。

如果要放弃所有更改,则可以在.gitconfig的别名中使用任何有效选项。例如:

[alias]
    discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"

用法: git discard