git:撤消所有工作目录更改,包括新文件
如何从工作目录中删除所有更改,包括新的未跟踪文件。我知道git checkout-f可以做到这一点,但它不会删除自上次提交以来创建的新的未跟踪文件 有人知道怎么做吗git:撤消所有工作目录更改,包括新文件,git,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
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-从工作树中删除未跟踪的文件
从当前目录开始,通过递归删除不受版本控制的文件来清理工作树
通常,只删除git未知的文件,但如果指定了-x选项,则也会删除被忽略的文件。例如,这对于删除所有生成产品非常有用
我经常使用的最安全的方法:
git clean -fd
按照/docs/git clean
页面进行语法解释:
(别名:-f
)。如果Git配置变量clean.requireForce未设置为false,Git clean将拒绝删除文件或目录,除非给定-f、-n或-i。Git将拒绝删除带有.Git子目录或文件的目录,除非给出第二个-f-force
。除了删除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他Git存储库管理,则默认情况下不会删除该目录。如果确实要删除这样的目录,请使用-f选项两次-d
git clean-nd
,它会进行一次试运行,并在实际删除之前告诉您将删除哪些内容
链接到git clean的doc页面:
对于所有跟踪的未归档的文件,请使用:
git checkout -- .
结尾的
很重要
您可以使用子目录名替换
,以仅清除项目的特定子目录。这个问题得到了明确的解决。以下工作:
git add -A .
git stash
git stash drop stash@{0}
请注意,这将丢弃未分级和分级的本地更改。因此,在运行这些命令之前,您应该提交任何要保留的内容
一个典型的用例:你移动了很多文件或目录,然后想回到原始状态
信用证:另一种解决方案是提交更改,然后取消这些提交。起初,这并不会带来立竿见影的好处,但它提供了成批提交和为备份创建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分支开始):
然而,我通常做的是分块提交,然后将部分或全部提交命名为“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 checkout -- FolderToClean/*
您可以通过两个步骤完成此操作:
还原修改的文件:git签出-f
删除未跟踪的文件:git clean-fd
我想是的(警告:跟随将消灭一切)
重置以撤消更改。clean
删除任何未跟踪的f文件和d目录。git clean-i
将首先显示要删除的项目,并在确认后继续。我发现这在处理不应意外删除的重要文件时很有用
有关更多信息,包括一些其他有用的选项,请参见git help clean
。如果要放弃所有更改,可以使用.gitconfig
中别名中的任何有效选项。例如:
[alias]
discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"
用法:git discard
git reset --hard origin/{branchName}
它将删除所有未跟踪的文件 这可能是一个noob答案,但是:
我在windows上使用Ortoisegit,它有一个很好的特性,叫做REVERT。
因此,您要还原本地非分级非推送更改所做的是:
打开所需文件夹的关联菜单,然后选择“还原”,
它显示一个还原弹出窗口,您可以在其中选择要还原/恢复的已更改文件
如果您还想删除添加的文件(不在git中),请单击commit(从同一上下文)
菜单)弹出提交弹出窗口,显示添加的文件,然后
右键单击每个选项,然后选择“删除”。但不要按“提交”
btn在这个弹出窗口,因为你不想提交,但只看到添加
文件并从此处删除它们
注意:git reset——硬删除暂存更改以及工作目录更改。另外,git clean-f-d可能是添加新的未跟踪文件的更好的反面。从这个问题来看,提问者可能对当前被忽略的一组文件非常满意。阅读下一个答案,注意-x开关。(它还可能删除您的本地配置,例如password/db settings文件。例如database.yml)在这种情况下,-x开关是不必要的,而且有点危险。git clean-fxd
如果您不知道自己在做什么,实际上可能非常危险。您可能会永久删除一些非常重要的未跟踪文件,例如您的数据库等。请注意,git clean-f-d
也会从忽略的文件夹中删除文件。所以你所有的本地日志和类似的东西都将消失。通常这不是什么大问题,但最好知道。我总是git clean-nd.
在使用git clean-fd实际删除文件之前。
为什么?请您解释一下细节好吗?Per-n选项实际上是一个不删除任何内容的试运行,它只显示将要执行的操作。@tbear,您始终可以执行bla
[alias]
discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"
git reset --hard origin/{branchName}