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

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 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 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
    (别名:
    -force
    )。如果Git配置变量clean.requireForce未设置为false,Git clean将拒绝删除文件或目录,除非给定-f、-n或-i。Git将拒绝删除带有.Git子目录或文件的目录,除非给出第二个-f
  • -d
    。除了删除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他Git存储库管理,则默认情况下不会删除该目录。如果确实要删除这样的目录,请使用-f选项两次
正如在评论中提到的,最好执行一个
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}