git: undo all working dir changes including new files
如何从工作目录中删除所有更改,包括新的未跟踪文件。我知道
有人知道怎么做吗?
1 2 3 4 5 6 7 8 | 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) |
要查看在手之前要删除的内容,而不实际删除它,请使用
最安全的方法,我经常使用:
1 | git clean -fd |
语法解释按
-f (别名:--force )。如果git配置变量clean.requireforce未设置为false,则git clean将拒绝删除文件或目录,除非给出-f、-n或-i。git将拒绝删除具有.git子目录或文件的目录,除非给出第二个-f。-d 。删除未跟踪的目录以及未跟踪的文件。如果未跟踪的目录由其他Git存储库管理,则默认情况下不会删除该目录。如果确实要删除这样的目录,请使用-f选项两次。
正如注释中所提到的,最好是执行一个执行试运行的
链接到
对于所有未分页的文件,请使用:
1 | git checkout -- . |
最后的
您可以用子目录名替换
看看
git-clean - Remove untracked files from the working tree
Cleans the working tree by recursively removing files that are not under version control, starting from the current directory.
Normally, only files unknown to git are removed, but if the -x option is specified, ignored files are also removed. This can, for example, be useful to remove all build products.
以下工作:
1 2 3 | git add -A . git stash git stash drop stash@{0} |
请注意,这将丢弃未分页和阶段性的本地更改。所以在运行这些命令之前,您应该提交您想要保留的任何内容。
一个典型的用例:你移动了大量的文件或目录,然后想要回到原始状态。
学分:https://stackoverflow.com/a/52719/246724
您可以分两步完成此操作:
我以为是的(警告:以下内容将清除所有内容)
1 2 | $ git reset --hard HEAD $ git clean -fd |
用于撤消更改的
1 | git reset --hard origin/{branchName} |
它将删除所有未跟踪的文件。
有关更多信息,包括一些其他有用的选项,请参阅
对于我使用的特定文件夹:
1 | git checkout -- FolderToClean/* |
另一种解决方案是提交更改,然后去掉这些提交。这在一开始并没有立即的好处,但它打开了以块形式提交和创建用于备份的Git标记的可能性。
您可以在当前分支上执行此操作,如下所示:
1 2 3 4 5 | 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分支开始):
1 2 3 4 5 | 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 |
然而,我通常做的是成批提交,然后将一些或所有提交命名为"放弃…"。然后使用交互式REBASE删除错误的提交并保留好的提交。
1 2 3 4 5 6 7 | 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". |
这更详细,但它允许您确切地查看要放弃的更改。
如果要放弃所有更改,可以使用
1 2 | [alias] discard ="!f() { git add . && git stash && git stash drop stash@{0}; }; f" |
用法:
这可能是一个无意义的答案,但是:我在Windows中使用了TortoiseGit,它有一个称为Revert的好特性。因此,要恢复本地的非阻塞更改,您需要做的是: