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

问题描述:

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

解决方案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大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值