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
你可以通过两步来做到这一点:
-  恢复修改后的文件: git checkout -f
-  删除未跟踪的文件: 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 lol和git 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} 
它会删除所有未跟踪的文件。