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}
它会删除所有未跟踪的文件。