问题描述:
如何从当前工作树中删除未跟踪的本地文件?
解决方案1:
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
git-clean - 从工作树中删除未跟踪的文件提要 git clean [-d] [-f] [-i] [-n] [-q] [-e ] [-x | -X] [–] … 描述 从当前目录开始,通过递归删除不受版本控制的文件来清理工作树。通常,只删除 Git 未知的文件,但如果指定了 -x 选项,也会删除忽略的文件。例如,这对于删除所有构建产品很有用。如果给出了任何可选的 … 参数,则只有那些路径会受到影响。
第 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 repository
git clean -f
要删除目录,请运行 git clean -f -d 或 git clean -fd
要删除被忽略的文件,请运行 git clean -f -X 或 git clean -fX
要删除忽略和未忽略的文件,请运行 git clean -f -x 或 git clean -fx
注意后两个命令在 X 上的大小写差异。
如果在您的配置中将 clean.requireForce 设置为“true”(默认值),则需要指定 -f,否则实际上不会发生任何事情。
再次查看 git-clean 文档以获取更多信息。
选项 -f、–force 如果 Git 配置变量 clean.requireForce 没有设置为 false,除非给定 -f、-n 或 -i,否则 git clean 将拒绝运行。 -x 不要使用从 .gitignore(每个目录)和 $GIT_DIR/info/exclude 读取的标准忽略规则,但仍然使用 -e 选项给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。这可以用来(可能与 git reset 结合使用)来创建一个原始工作目录来测试一个干净的构建。 -X 仅删除 Git 忽略的文件。这可能有助于从头开始重建所有内容,但保留手动创建的文件。 -n, --dry-run 实际上不删除任何东西,只是显示将要做什么。 -d 除了未跟踪的文件之外,还删除未跟踪的目录。如果未跟踪的目录由不同的 Git 存储库管理,则默认情况下不会将其删除。如果您真的想删除这样的目录,请使用两次 -f 选项。
git clean -f 仅在调用它的目录(和子目录)中有效。如果要清理整个工作副本,则应在其根目录中调用它。
它还删除了 .gitignore 中的所有文件。我只需要删除新的而不是 .gitignore 中的文件/文件夹
@Kostanos如果您不想删除 .gitignore 中的文件,请不要提供 -x 标志。
git clean -f :/ 就像您在根存储库目录中运行它一样工作。另请参阅后面的答案,也考虑使用 git clean -ffxd :/ 的子模块
在挣扎和诅咒了 45 分钟后,我找到了@EduardoBezerra 的评论......我认为 OP 应该编辑他的答案以强调 git clean 的行为——只删除你所在目录及其子目录中的内容。从 git help 或答案本身都不清楚。
解决方案2:
huntsbot.com – 高效赚钱,自由工作
使用 git clean -f -d 确保 directories 也被删除。
实际上不要删除任何东西,只是显示将要做什么。 git clean -n 或 git clean --dry-run 除了未跟踪的文件之外,删除未跟踪的目录。如果未跟踪的目录由不同的 Git 存储库管理,则默认情况下不会将其删除。如果您真的想删除这样的目录,请使用两次 -f 选项。 git 清理 -fd
然后您可以使用 git status 检查您的文件是否真的消失了。
如前所述,最好使用 git clean -n -d 进行空运行
git clean -nd 和 git clean -fd 也是一样。
单独使用 -n 或 --dry-run 没有任何作用。根据 @Ms01 和 @Micer,您需要添加 -d,如 git clean -nd 以显示它将删除的内容。
解决方案3:
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
我很惊讶之前没有人提到这一点:
git clean -i
这代表 interactive,您将快速了解将要删除的内容,从而为您提供包含/排除受影响文件的可能性。总体而言,仍然比在真正清洁之前运行强制 --dry-run 快。
如果您还想处理空文件夹,则必须加入 -d。最后,它形成了一个很好的别名:
git iclean
话虽如此,对于有经验的用户来说,额外手持交互式命令可能会很累。这些天我只使用已经提到的git clean -fd
@pal4life 它是在 1.8.4 中添加的,您可能正在运行旧版本的 git? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt
我喜欢这个——我更喜欢在我的 bash 历史中使用它而不是其他任何选项,因为如果我不小心 ctrl-r 或 ctrl-p 到它,这没什么大不了的。
是否只有从工作副本的根目录调用 git clean -i 才有效?
解决方案4:
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。
git-clean - Remove untracked files from the working tree
git clean -f '未跟踪的文件路径'
解决方案5:
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
删除未跟踪文件的简单方法
要删除所有未跟踪的文件,简单的方法是首先添加所有文件并重置 repo,如下所示
git add --all
git reset --hard HEAD
您可以将 git add --all 替换为 git add .。因此,您可以在一行 git add . && git reset --hard HEAD (使用此命令时要非常小心) 以更短的方式执行此操作。
因为 git clean 显然也删除了所有被忽略的内容。它刚刚删除了我的 node_modules 文件夹。这样做会首先暂存所有文件,除了被忽略的文件,然后通过重置删除它们。被忽略的文件不会被触及。
@Andreas 它不会为我删除被忽略的文件(git 2.14.1)。 You should run git clean -n 在进行真正的删除之前(或使用 git clean -i)。
仅当您使用 -x 或 -X 选项时,git clean 才会删除忽略的文件,否则只会删除未跟踪的文件。
@RousseauAlexandre git add . 仅从当前目录向下添加,而 git add --all 适用于 repo。后者似乎是一个更安全的选择。
解决方案6:
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
如果未跟踪目录是它自己的 git 存储库(例如子模块),则需要使用 -f 两次:
git clean -d -f -f
顺便说一句,这写在 documentation 中:Git 将拒绝删除带有 .git 子目录或文件的目录,除非给出第二个 -f 。不过还是谢谢!
解决方案7:
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
这是我一直使用的:
git clean -fdx
对于一个非常大的项目,您可能需要运行几次。
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
@Martin 我正在从事的项目之一是 +8 岁,有 +80 名开发人员积极编码。 Git 有时无法在第一次通过时清理它。
我可以确认这一点,所以这在 2020 年仍然有效。我们也在做一个大型项目,我不得不运行它 4-5 次,直到 GIT 找不到更多要删除的文件。
要记住的主要事情是,上述命令仅适用于您所在的目录。因此,如果您在子文件夹中运行上述命令,则它不会从父文件夹或其他子文件夹中删除未跟踪的文件。
解决方案8:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
我喜欢 git stash push -u,因为您可以使用 git stash pop 将它们全部撤消。
编辑:我还找到了一种在存储中显示未跟踪文件的方法(例如 git show stash@{0}^3)https://stackoverflow.com/a/12681856/338986
EDIT2:git stash save 已弃用,取而代之的是 push。谢谢@script-wolf。
你能解释一下藏匿处的 -u 吗?我不了解它与 git stash save 的工作方式有何不同。我试过了,它奏效了。在 git docs 上查看,也找不到它。
-u 等同于 --include-untracked。您可以通过 git help stash 找到帮助。
@hiroshi 谢谢!在尝试了十几个不同的人的每一个该死的解决方案之后,这就是最终奏效的解决方案......哇!即使是 git stash 也没有。保存 - 你照顾未跟踪。 reset hard /clean force/etc 这些都没有为我做任何事情。
save 选项已被弃用,取而代之的是 push,后者的作用相同但更多。您可以在此处阅读更多内容,https://stackoverflow.com/questions/44680028/whats-the-difference-between-git-stash-save-and-git-stash-push/44681952
解决方案9:
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
git-clean 是您要查找的内容。它用于从工作树中删除未跟踪的文件。
解决方案10:
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
如果需要从特定子目录中删除未跟踪的文件,
git clean -f {dir_path}
以及删除未跟踪的目录/文件和忽略文件的组合方式。
git clean -fxd {dir_path}
在此之后,您将仅在 git status 中修改文件。
解决方案11:
huntsbot.com – 高效赚钱,自由工作
删除此 repo + 子模块中的所有额外文件夹和文件
这使您处于与新鲜克隆相同的状态。
git clean -ffdx
删除此 repo 中的所有额外文件夹和文件,但不删除其子模块
git clean -fdx
删除额外的文件夹,但不删除文件(例如 build 或 logs 文件夹)
git clean -fd
删除多余的文件夹 + 忽略的文件(但不是新添加的文件)
如果文件未被忽略且尚未签入,则它会保留。注意大写 X。
git clean -fdX
新的交互模式
git clean
这个答案很好用!您始终可以添加 --dry-run 选项以在提交操作之前列出要删除的文件/文件夹
原文链接:https://www.huntsbot.com/qa/nb2k/how-to-remove-local-untracked-files-from-the-current-git-working-tree?lang=zh_CN
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。