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

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

有没有人有一个想法如何做到这一点?

 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) 

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

 git clean -fd 

对于所有未分档的文件使用:

 git checkout -- . 

. 最后是重要的。

你可以replace. 用一个子目录名来只清除你项目的一个特定的子目录。 这个问题在这里具体解决。

看看git clean命令。

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

通过从当前目录开始recursion地移除不受版本控制的文件来清除工作树。

通常情况下,只有git未知的文件被删除,但是如果指定了-x选项,被忽略的文件也会被删除。 例如,这可以用于删除所有构build产品。

以下工作:

 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 

重置以撤消更改。 干净的删除任何未跟踪的文件和目录。

另一种解决scheme是提交更改,然后摆脱这些提交。 这一开始并没有立竿见影的效果,但是它开辟了以块的forms进行提交的可能性,并为备份创build了一个git标签。

您可以在当前分支上执行此操作,如下所示:

 git add (-A) . git commit -m"DISCARD: Temporary local changes" git tag archive/local-changes-2015-08-01 # optional git revert HEAD git reset HEAD^^ 

或者你可以在分离的头上做。 (假设你在BRANCHNAME分支上开始):

 git checkout --detach HEAD git add (-A) . git commit -m"DISCARD: Temporary local changes" git tag archive/local-changes-2015-08-01 # optional git checkout BRANCHNAME 

但是,我通常做的是大块地提交,然后将一些或全部提交命名为“DISCARD:…”。 然后使用交互式重新分类来删除不良的提交并保留好的提交。

 git add -p # Add changes in chunks. git commit -m"DISCARD: Some temporary changes for debugging" git add -p # Add more stuff. git commit -m"Docblock improvements" git tag archive/local-changes-2015-08-01 git rebase -i (commit id) # rebase on the commit id before the changes. # Remove the commits that say "DISCARD". 

这是比较冗长的,但它允许准确地查看你想要丢弃的更改。

git lolgit lola快捷键对这个工作stream程非常有帮助。

对于我使用的特定文件夹:

 git checkout -- FolderToClean/* 

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

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

用法: git discard

git clean -i会首先显示要删除的项目,并在确认后继续。 在处理不应该被意外删除的重要文件时,我觉得这很有用。

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

 git reset --hard origin/{branchName} 

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