首页 文章

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

提问于
浏览
6027

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

30 回答

  • 7884

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

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

    • 将文件和文件夹从本地项目文件夹中移动到其他位置一段时间

    • 删除.gitignore中有关提交的这些文件和文件夹的所有行

    • Git add .

    • Git commit -m“从未跟踪文件清理存储库”

    • Git推

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

    如果需要,可以在localhost上恢复它们:

    • 将您已临时移动的所有文件和文件夹再次移回本地项目文件夹

    • 将有关这些文件和文件夹的所有行移回.gitignore

    • Git add .

    • Git commit -m“检查或文件没有再出现在git仓库中”

    • Git推

    你完成了!

  • 95
  • 20

    对我来说只有工作:

    git clean -ffdx
    

    在所有其他情况下,我收到一些子目录的消息"Skipping Directory" .

  • 10

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

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

    Example:

    git reset --hard HEAD
    

    Links :

  • 1

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

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

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

  • 15

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

    git clean -d -n

    它将输出如下内容:

    Would remove sample.txt

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

    git clean -d -f

    它将输出如下内容:

    Removing sample.txt

  • 5

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

    git clean -d -f -f

  • 34

    OK, 在命令行中使用 git 很容易删除 unwanted untracked files and folders ,只需这样做:

    git clean -fd
    

    Double check 之前这样做会删除文件和文件夹而不做任何历史记录......

    同样在这种情况下, -f 代表强制, -d 代表目录......

    因此,如果您只想删除文件,则只能使用 -f

    git clean -f
    

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

    git clean -fd
    

    此外,您可以使用 -x 标志来包含git忽略的文件 . 如果要删除所有内容,这将非常有用 .

    并添加 -i 标志,让git要求您在移动中逐个删除文件的权限 .

    如果您不确定并想先检查一下,请添加 -n 标志 .

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

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

  • 388

    我很惊讶之前没有人提到这件事:

    git clean -i
    

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

    如果你还想要处理空文件夹,你将不得不投入 -d . 最后,它有一个很好的别名:

    git iclean
    

    话虽这么说,额外的手持交互式命令可能会让有经验的用户感到厌倦 . 这些天我只是使用已经提到的 git clean -fd

  • 421

    git-clean正是您要找的 . 它用于从工作树中删除未跟踪的文件 .

  • 73

    User interactive approach:

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

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

    Note: 添加 -n--dry-run 以查看它将执行的操作 .

  • 5

    git clean -f -d -x $(git rev-parse --show-cdup) 将clean应用于根目录,无论您在存储库目录树中何处调用它 . 我一直使用它,因为它不会强迫你离开你现在工作的文件夹,并允许从你所在的地方清理和提交 .

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

    -d
           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 -f option twice if you really want to
           remove such a directory.
    
    -f, --force
           If the Git configuration variable clean.requireForce is not set to
           false, git clean will refuse to delete files or directories unless
           given -f, -n or -i. Git will refuse to delete directories with .git
           sub directory or file unless a second -f is given. This affects
           also git submodules where the storage area of the removed submodule
           under .git/modules/ is not removed until -f is given twice.
    
    -x
           Don't use the standard ignore rules read from .gitignore (per
           directory) and $GIT_DIR/info/exclude, but do still use the ignore
           rules given with -e options. This allows removing all untracked
           files, including build products. This can be used (possibly in
           conjunction with git reset) to create a pristine working directory
           to test a clean build.
    

    还有其他标志可用,只需检查 git clean --help .

  • 6

    使用 git clean -f -d 确保也删除 directories .

    然后,您可以使用 git status 检查您的文件是否真的消失了 .

  • 3

    我刚刚发明并尝试过这种情况的生活方式(完美无缺):

    git add .
    git reset --hard HEAD
    

    Beware! 一定要 commit any needed changes (即使在非未跟踪文件中) before performing this .

  • 13

    带有 zshoh-my-zsh 通过git插件提供了那些很棒的别名 . 它们也可以用于bash .

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

    • gclean 删除未跟踪的目录以及未跟踪的文件 .

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

  • 13

    更好的方法是使用:git clean

    git clean -d -x -f
    

    这将删除未跟踪的文件,包括目录 (-d)git (-x) 忽略的文件 .

    此外,将 -f 参数替换为 -n 以执行 dry-run-i 用于交互模式,它将告诉您将删除的内容 .

  • 32

    递归清理git存储库和所有子模块以下命令将以递归方式清除当前git存储库及其所有子模块:( git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

  • 120

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

    git clean -fdn
    

    这将显示将要删除的文件列表 . 现在要实际删除这些文件使用此命令:

    git clean -fd
    
  • 48
    git clean -f
    

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

    git clean -fd
    

    当你想删除目录和文件时,这将只删除未跟踪的目录和文件

  • 212

    删除未跟踪文件的简单方法要删除所有未跟踪文件,最简单的方法是首先添加所有文件并重置repo,如下面的git add --all
    git reset --hard HEAD


  • 8

    Remove all extra folders and files in this repo + submodules

    这使您处于与新克隆相同的状态 .

    git clean -ffdx
    

    Remove all extra folders and files in this repo but not its submodules

    git clean -fdx
    

    Remove only extra folders but not files (ex. build folder)

    git clean -fd
    

    Remove extra folders + ignored files (but not any newly added files)

    如果文件未被忽略且尚未签入,那么它将保留 . 注意大写字母X.

    git clean -fdX
    

    New interactive mode

    git clean
    
  • 5

    Removing Untracked Files from git docs 的uggested命令是 git clean

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

    Suggested Method: 使用 git clean -i 进行交互模式,以便我们可以控制它 . 让我们看看剩余的可用选项

    Available Options:

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

    Explanation:

    1. -d

    除了未跟踪的文件之外,删除未跟踪的目录 . 如果未跟踪的目录由不同的Git存储库管理,则默认情况下不会删除它 . 如果您确实要删除此类目录,请使用-f选项两次 .

    2. -f, --force

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

    3. -i, --interactive

    显示将要执行的操作并以交互方式清理文件 . 有关详细信息,请参见“交互模式”

    4. -n, --dry-run

    实际上不要删除任何东西,只显示将要做的事情 .

    5. -q, --quiet

    保持安静,仅报告错误,但不报告成功删除的文件 .

    6. -e , --exclude=

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

    7. -x

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

    8. -X

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

  • 1

    正常 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!
    
  • 34

    git clean -fd 删除目录

    git clean -fX 删除被忽略的文件

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

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

    git clean -fdXx

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

  • 856

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

    我在博客中介绍了一些基础知识,git-intro-basic-commands

  • 151

    我喜欢 git stash push -u 因为你可以用 git stash pop 撤消它们 .

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

    EDIT2: git stash save 不推荐使用 push . 谢谢@ script-wolf .

  • 5

    运行git clean命令时要小心 .

    Always use -n 在运行实际命令之前,它将显示将删除哪些文件 .

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

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

    git clean -f -d -x
    

    使用clean命令还可以使用交互模式 -i

    git clean -x -i
    

    或者

    如果您不是100%确定删除未提交的作品是安全的,则可以使用存储

    git stash --all
    

    它还将清除您的目录,但您可以使用 stashapplypop 在任何时间点灵活地检索文件 . 然后在以后指出你可以使用以下方法清除你的藏匿

    git stash drop // or clean
    
  • 83

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

    git clean -f {dir_path}
    

    并结合使用方法删除未跟踪的目录/文件和忽略的文件 .

    git clean -fxd {dir_path}
    

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

  • 15

    根据Git文档git clean

    从工作树中删除未跟踪的文件


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

    git clean -n
    

    清洁步骤 - beware: this will delete files

    git clean -f
    
    • 要删除目录,请运行 git clean -f -dgit clean -fd

    • 要删除被忽略的文件,请运行 git clean -f -Xgit clean -fX

    • 要删除已忽略和未忽略的文件,请运行 git clean -f -xgit clean -fx

    Note 后两个命令的 X 的大小写差异 .

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

    有关更多信息,请再次参阅git-clean docs .

    选项

    -f

    --force

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

    -x

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

    -X

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

    -n

    --dry-run

    实际上不要删除任何东西,只显示将要做的事情 .

    -d

    除了未跟踪的文件之外,删除未跟踪的目录 . 如果未跟踪的目录由不同的Git存储库管理,则默认情况下不会删除它 . 如果您确实要删除此类目录,请使用-f选项两次 .

  • 3

    这就是我经常使用的:

    git clean -fdx
    

    对于一个非常大的项目,您可能希望运行它几次 .

相关问题