如何从当前Git工作树中删除本地(未跟踪)文件?

如何从当前工作树中删除未跟踪的本地文件?

2920172 次浏览

git清理是您要查找的。它用于从工作树中删除未跟踪的文件。

git清理-从工作树中删除未跟踪的文件

剧情介绍

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​

特性介绍

通过递归删除不受版本控制的文件来清理工作树,从当前目录开始

通常,仅删除Git未知的文件,但如果指定了-x选项,则忽略的文件也会被删除。例如,这对于删除所有构建产品很有用。

如果给出了任何可选的<path>...参数,则仅影响这些路径。


步骤1是使用-n选项显示将删除的内容:

# Print out the list of files and directories which will be removed (dry run)git clean -n -d

清洁步骤-注意:这将删除文件

# Delete the files from the repositorygit clean -f
  • 要删除目录,请运行git clean -f -dgit clean -fd
  • 要删除忽略的文件,请运行git clean -f -Xgit clean -fX
  • 要删除忽略和未忽略的文件,请运行git clean -f -xgit clean -fx

说明后两个命令在X上的大小写差异。

如果clean.requireForce在配置中设置为“true”(默认值),则需要指定-f,否则实际不会发生任何事情。

有关更多信息,请再次参阅#0文档。


选项

-f--force

如果Git配置变量clean.requireForce未设置为false,除非给出-f-n-i,否则git Clean将拒绝运行。

-x

不要使用从. gitignore(per)读取的标准忽略规则目录)和$GIT_DIR/info/exclude,但仍然使用忽略使用-e选项给出的规则。这允许删除所有未跟踪的文件,包括构建产品。这可以使用(可能结合与git重置)创建一个原始的工作目录来测试一个干净的构建。

-X

仅删除Git忽略的文件。这可能对重建有用一切从头开始,但保留手动创建的文件。

-n--dry-run

实际上不要删除任何东西,只是显示会做什么。

-d

除了未跟踪的文件外,删除未跟踪的目录。如果未跟踪目录由不同的Git存储库管理,它是默认情况下未删除。如果您真的想要,请使用-f选项两次删除这样的目录。

使用git clean -f -d确保目录也被删除。

  1. 实际上不要删除任何东西,只是显示要做什么。

    git clean -n

    git clean --dry-run
  2. Remove untracked directories in addition to untracked files. If an untracked directory is managed by a different Git repository, it is not removed by default. Use the -f option twice if you really want to remove such a directory.

    git clean -fd

You can then check if your files are really gone with git status.

如果未跟踪目录是它自己的git存储库(例如子模块),您需要使用-f两次:

git clean -d -f -f

如果需要从特定子目录中删除未跟踪的文件,

git clean -f {dir_path}

并结合方式删除未跟踪的dir/文件和忽略的文件。

git clean -fxd {dir_path}

在此之后,您将仅在git status中修改文件。

这是我经常使用的:

git clean -fdx

对于一个非常大的项目,你可能想运行它几次。

我很惊讶以前没有人提到过这一点:

git clean -i

这代表互动,您将快速了解将要删除的内容,为您提供包含/排除受影响文件的可能性。总的来说,仍然比在真正清理之前运行强制性的--dry-run更快。

如果您还想处理空文件夹,则必须输入-d。最后,它做了一个很好的别名:

git iclean

话虽如此,对于有经验的用户来说,额外的手持交互式命令可能会很累。这些天我只是使用已经提到的git clean -fd

我喜欢git stash push -u,因为你可以用git stash pop撤销它们。

编辑:我还找到了一种在藏匿中显示未跟踪文件的方法(例如git show stash@{0}^3https://stackoverflow.com/a/12681856/338986

EDIT2:git stash save已被弃用,转而支持push。谢谢@scrip-Wolf。

git clean -fd删除目录

git clean -fX删除忽略的文件

git clean -fx删除忽略和未忽略的文件

可以将上述所有选项组合使用

git clean -fdXx

查看git手册以获得更多帮助

更好的方法是使用:git Clean

git clean -d -x -f

这会删除未跟踪的文件,包括目录(-d)和被git (-x)忽略的文件。

此外,将-f参数替换为-n以执行dry-run-i的交互模式,它会告诉您将删除什么。

git clean -f -d -x $(git rev-parse --show-cdup)适用于根目录,无论您在存储库目录树中的哪个位置调用它。我一直使用它,因为它不会强制您离开现在工作的文件夹,并允许从您所在的位置进行清理和提交。

确保标志-f-d-x符合您的需求:

-dRemove untracked directories in addition to untracked files. If anuntracked directory is managed by a different Git repository, it isnot removed by default. Use -f option twice if you really want toremove such a directory.
-f, --forceIf the Git configuration variable clean.requireForce is not set tofalse, git clean will refuse to delete files or directories unlessgiven -f, -n or -i. Git will refuse to delete directories with .gitsub directory or file unless a second -f is given. This affectsalso git submodules where the storage area of the removed submoduleunder .git/modules/ is not removed until -f is given twice.
-xDon't use the standard ignore rules read from .gitignore (perdirectory) and $GIT_DIR/info/exclude, but do still use the ignorerules given with -e options. This allows removing all untrackedfiles, including build products. This can be used (possibly inconjunction with git reset) to create a pristine working directoryto test a clean build.

还有其他标志可用,只需选中git clean --help

在实际删除之前要知道要删除的内容:

git clean -d -n

它将输出如下内容:

会消除sample.txt

要删除上一个命令输出中列出的所有内容:

git clean -d -f

它将输出如下内容:

删除sample.txt

我刚刚发明并尝试了这种情况的生活技巧(效果完美):

git add .git reset --hard HEAD

当心!确保提交任何必要的更改(即使在非未跟踪的文件中)在执行此

如果您只想删除“git status”列出为未跟踪的文件

git stash save -ugit stash drop "stash@{0}"

我更喜欢这个,因为'git Clean'会删除文件被git忽略,所以你的下一个构建将不得不重建所有内容您也可能会丢失您的IDE设置。

删除未跟踪文件的简单方法

要删除所有未跟踪的文件,简单方法是先把它们加起来重置回购如下

git add --allgit reset --hard HEAD

对我来说,只有以下工作:

git clean -ffdx

在所有其他情况下,我收到一些子目录的消息“跳过目录”

普通git clean命令不会删除我的git version 2.9.0.windows.1未跟踪的文件。

$ git clean -fdx     # doesn't remove untracked files$ git clean -fdx *   # Append star then it works!

要删除未跟踪的文件,您应该首先使用命令查看将受到清理影响的文件

git clean -fdn

这将向您显示将被删除的文件列表。现在要实际删除这些文件,请使用此命令:

git clean -fd

注意:首先导航到目录并签出要清理的分支。

-i交互模式,它会告诉你什么将被删除,你可以从列表中选择一个动作。

  1. 仅清理文件[文件夹不会被列出,也不会被清理]:$ git clean -i

  2. 清理文件和文件夹$ git clean -d -i

-d包括目录。


如果您从列表中选择c。未跟踪的文件/文件夹将被删除,并且还将删除您弄乱的文件/文件夹。*

例如:如果您在远程重组文件夹并将更改拉取到本地计算机。其他人最初创建的文件/文件夹将在过去的文件夹和您重组的新文件夹中。

删除此repo+子模块中的所有额外文件夹和文件

这让你处于与新鲜克隆相同的状态。

git clean -ffdx

删除此仓库中的所有额外文件夹和文件,但不删除其子模块

git clean -fdx

删除额外的文件夹但不删除文件(例如。构建或日志文件夹)

git clean -fd

删除额外的文件夹+忽略的文件(但不是新添加的文件)

如果文件未被忽略且尚未签入,则它会保留。注意大写X。

git clean -fdX

新的交互模式

git clean

git clean -f to remove untracked files from working directory.

我在我的博客中介绍了一些基础知识,g it-intro-basic-命令

用户交互方法:

git clean -i -fd
Remove .classpath [y/N]? NRemove .gitignore [y/N]? NRemove .project [y/N]? NRemove .settings/ [y/N]? NRemove src/com/arsdumpgenerator/inspector/ [y/N]? yRemove src/com/arsdumpgenerator/manifest/ [y/N]? yRemove src/com/arsdumpgenerator/s3/ [y/N]? yRemove tst/com/arsdumpgenerator/manifest/ [y/N]? yRemove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i用于交互式
-f表示力
-d用于目录
-x用于忽略的文件(如果需要添加)

注:添加-n--dry-run来检查它会做什么。

OK,删除不需要的未跟踪文件和文件夹很容易在命令行中使用git,只需这样做:

git clean -fd

再检查一遍在这样做之前,因为它会删除文件和文件夹而不会产生任何历史记录…

同样在这种情况下,-f代表力,-d代表目录…

因此,如果您只想删除文件,您可以仅使用-f

git clean -f

如果您想删除(目录)和文件,您只能删除未跟踪的目录和文件,如下所示:

git clean -fd

此外,您可以使用-x标志来包含被git忽略的文件。如果您想删除所有内容,这将很有帮助。

并添加-i标志,使git要求您在旅途中一个接一个地删除文件的权限。

如果你不确定,想先检查一下,添加-n标志。

如果您不想在成功删除后看到任何报告,请使用-q

我还创建了下面的图像,使其更令人难忘,特别是我看到很多人有时会混淆-f来清理文件夹,或者以某种方式混淆它!


删除不需要的未跟踪文件和文件夹

使用git reset HEAD <file>取消暂存文件

从git文档中删除未跟踪的文件的命令是git干净

git干净-从工作树中删除未跟踪的文件

建议使用方法:使用git clean -i的交互模式所以我们可以控制它。让我们看看剩余的可用选项。

可用选项:

git clean-d -f -i -n -q -e -x -X (can use either)

说明:

1.-d

除了未跟踪的文件外,删除未跟踪的目录。如果未跟踪的目录由不同的Git存储库管理,默认情况下它不会被删除。如果您真的想删除这样的目录,请使用-f选项两次。

2.-f,--force

如果Git配置变量clean.requireForce未设置为false,git Clean将拒绝运行,除非给定-f、-n或

3.-i,--交互式

显示将完成的工作并以交互方式清理文件。有关详细信息,请参阅“交互模式”。

4.-n,--dry-run

实际上不要删除任何东西,只是显示会做什么。

5.-q,--安静

安静,只报告错误,而不是成功删除的文件。

6.-e,排除=

除了在. gitignore(每个目录)和$GIT_DIR/info/排除中找到的模式之外,还要考虑这些模式在设置有效的忽略规则。

7.-x

不要使用从. gitignore(每个目录)和$GIT_DIR/info/排除中读取的标准忽略规则,但仍然使用忽略使用-e选项给出的规则。这允许删除所有未跟踪的文件,包括构建产品。这可以使用(可能在可以创建一个原始的工作目录来测试一个干净的构建。

8.-X

仅删除被Git忽略的文件。这可能有助于从头开始重建所有内容,但保留手动创建的文件。

递归清理git仓库和所有子模块

以下命令将清除当前git存储库及其所有子模块递归:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

运行“git Clean”命令时要小心。

总是使用-n第一

在运行Clean命令之前始终使用-n,因为它会告诉您哪些文件将被删除。

-d通常,当指定no时,git Clean不会递归到未跟踪的目录中,以避免删除太多。指定-d也可以递归到此类目录中。如果指定了任何路径,-d无关紧要;所有与指定路径匹配的未跟踪文件(--force下提到的嵌套git目录除外)都将被删除。

-f|--force如果Git配置变量clean.requireForce没有设置为false,git Clean将拒绝删除文件或目录,除非给出-f或-i。Git将拒绝修改未跟踪的嵌套git存储库(带有. git子目录的目录),除非给出第二个-f。

git clean -n -dgit clean -n -d -f

如果输出是您打算删除的,现在在没有-n的情况下运行。

git clean -d -f

默认情况下,git clean只会删除未被忽略的未跟踪文件。任何与您的. gitignore或其他忽略文件中的模式匹配的文件都不会被删除。如果您也想删除这些文件,您可以在清洁命令中添加-x

git clean -f -d -x

也有可用的交互模式-i与清洁命令

git clean -x -i

或者

如果您不能100%确定删除未提交的工作是安全的,您可以使用stash代替
git stash --all

在使用stash --all之前注意:如果使用--all选项,那么除了未跟踪文件之外,忽略文件也会被隐藏和清理。

git stash push --keep-index

如果使用--保持索引选项,则已添加到索引中的所有更改都保持不变。您的分阶段更改保留在您的工作区中,但同时,它们也会保存到您的存储中。

在没有任何参数的情况下调用git stash等效于git stash push

git stash push -m "name your stash" // before git stash save (deprecated)

基于已使用标志的存储可以通过将未暂存/暂存文件写入存储来清除您的目录。我可以灵活地使用藏匿适用流行在任何时间点检索文件。然后,如果您可以删除隐藏的文件,您可以运行:

git stash drop // or clean

要查看有关如何使用stash的完整说明,请参阅此如何在git中按名称命名和检索存储?

在此处输入图片描述

oh-my-zshzsh通过git插件提供了这些很棒的别名。它们也可以在bash中使用。

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • gclean除了未跟踪的文件外,还删除未跟踪的目录
  • gpristine硬重置本地更改,删除未跟踪的目录,未跟踪的文件和不要使用从. gitignore(每个目录)和$GIT_DIR/info/排除中读取的标准忽略规则,但仍然使用-e选项给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。这可以用于(可能与git重置一起使用)创建一个原始工作目录来测试干净的构建

我们可以通过使用下面的git注释轻松地从当前git工作树中删除本地未跟踪的文件。

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

示例:

git reset --hard HEAD

链接:

  1. https://git-scm.com/docs/git-reset
  2. 我如何使用'git重置--hard HEAD'恢复到以前的提交?
  3. 将本地存储库分支重置为远程存储库HEAD
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html
git clean -f

将从当前git中删除未跟踪的文件

git clean -fd

当您要删除目录和文件时,这将仅删除未跟踪的目录和文件

我在这里使用最流行的答案失败了-git不会删除存储库中未跟踪的文件无论如何。不知道为什么。这是我的超级简化的答案,没有特殊的GIT命令!

任务:从git存储库中删除未跟踪的文件:

  1. 将文件和文件夹从本地项目文件夹移动到其他地方一段时间
  2. 删除. gitignore中有关提交的这些文件和文件夹的所有行
  3. git add.
  4. Git提交-m"从未跟踪的文件中清理存储库"
  5. git推送

所有文件和文件夹已从存储库中删除。

如果您需要它们,请在localhost上恢复它们:

  1. 再次将临时移动的所有文件和文件夹移回本地项目文件夹
  2. 将有关这些文件和文件夹的所有行移回. gitignore
  3. git add.
  4. Git提交-m"检查或文件不再出现在git存储库中"
  5. git推送

你完蛋了!

我喜欢使用git stash命令,稍后您可以获得隐藏的文件和更改。git clean也是一个不错的选择,但完全取决于您的需求。下面是git stash和git Clean的解释,7.3 Git工具-存储和清理

如果没有其他方法,只需删除“git state”命令列出的所有更改,可以使用以下组合:

git add -A && git commit -m temp && git reset --hard HEAD^

这将首先执行所有更改,然后创建临时提交,然后将其丢弃。

我用这个:

  1. git status
  2. 复制文件的路径
  3. rm <path of file>

我的项目有很多生成的文件,这些文件是由一个巨大的ant构建脚本创建的。使用git clean会造成混乱。

这可以使用外壳脚本完成,我使用这个脚本列出将被删除的内容,然后让我确认操作。

这很有用,因为我有时会有补丁或其他文件,我想在擦除所有内容之前检查一下。

#!/bin/bashreadarray -t -d '' FILES < <(git ls-files -z --other --directory)if [ "$FILES" = "" ]; thenecho  "Nothing to clean!"exit 0fiecho -e "Dirty files:\n"printf '  %s\n' "${FILES[@]}"DO_REMOVE=0while true; doecho ""read -p "Remove ${#FILES[@]} files? [y/n]: " choicecase "$choice" iny|Y )DO_REMOVE=1break ;;n|N )echo "Exiting!"break ;;* ) echo "Invalid input, expected [Y/y/N/n]"continue ;;esacdone
if [ "$DO_REMOVE" -eq 1 ];thenecho "Removing!"for f in "${FILES[@]}"; dorm -rfv -- "$f"donefi

删除未跟踪的文件:

git add .git reset --hard HEAD

使用方法:git Clean[-d][-f][-i][-n][-q][-e][-x|-X][--]…

-q, --quiet           do not print names of files removed-n, --dry-run         dry run-f, --force           force-i, --interactive     interactive cleaning-d                    remove whole directories-e, --exclude <pattern>add <pattern> to ignore rules-x                    remove ignored files, too-X                    remove only ignored files

删除完整的更改删除所有数据git Clean-f-d

$ git clean -f -dRemoving client/app/helpers/base64.jsRemoving files/Removing package.json.bak
where-f is force-d is a directory

git add --allgit stashgit stash drop,按此顺序尝试这三个命令以删除所有未跟踪的文件。通过将所有未跟踪的文件添加到git并隐藏它们,将所有未跟踪的文件移动到存储列表并删除顶部的文件,即stash@{0}将从存储列表中删除隐藏的更改。

我认为安全和简单的方法是这样的!

git add .git stash

更多信息https://www.atlassian.com/git/tutorials/saving-changes/git-stash#stashing-your-work