我该如何从当前的工作树中删除未被跟踪的本地文件?
如果需要从特定的子目录中删除未跟踪的文件,
git clean -f {dir_path}
结合的方式删除未跟踪的目录/文件和忽略的文件。
git clean -fxd {dir_path}
在此之后,您将只会在 git status
中看到修改过的文件。
删除此存储库及其子模块中的所有额外文件夹和文件
这将使您处于与全新克隆相同的状态。
git clean -ffdx
删除此存储库中所有额外的文件夹和文件,但不包括其子模块。
git clean -fdx
删除额外的文件夹,但不包括文件(例如构建或日志文件夹)
git clean -fd
删除多余的文件夹和被忽略的文件(但不包括新增加的文件)
如果文件没有被忽略且还未被检入,则保留。请注意大写字母X。
git clean -fdX
新的交互模式
git clean
好的,在命令行中使用git
删除不需要跟踪的文件和文件夹很容易,只需按照以下步骤操作:
git clean -fd
在执行操作前请仔细检查,因为它将删除文件和文件夹而不留下任何历史记录...
在这种情况下,-f
表示强制,-d
表示目录...
因此,如果您只想删除文件,您可以仅使用 -f
:
git clean -f
如果您想要删除(目录)和文件,您可以像这样仅删除未被跟踪的目录和文件:
git clean -fd
此外,您可以使用-x
标志来包含被Git忽略的文件。如果您希望删除所有内容,这将非常有帮助。
添加-i
标志会使git在进行文件删除时逐个询问您是否允许。
如果您不确定并希望先检查,请添加-n
标志。
如果您不想在成功删除后看到任何报告,请使用-q
。
我还创建了下面的图片,以使其更加易于记忆,特别是我发现许多人有时会混淆-f
用于清理文件夹或以某种方式混淆它们!
git clean -fd
删除目录
git clean -fX
删除已被忽略的文件
git clean -fx
删除已被忽略和未被忽略的文件
可以将以上选项组合使用,如:
git clean -fdXx
更多帮助信息请查阅git手册。
git clean -fdXx
会在使用git-2.8时出现错误信息“fatal: -x and -X cannot be used together”。请参考Git手册中的相关内容。链接如下:https://git-scm.com/docs/git-clean - oHo更好的方法是使用:git clean
git clean -d -x -f
这将删除未被跟踪的文件, 包括目录 (-d)
和被Git忽略的文件 (-x)
。
另外,将-f
选项替换为-n
以执行dry-run
或使用-i
进行交互模式,它将告诉您将要删除的内容。
用户交互式方法:
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 用于忽略文件(根据需要添加)
注意:添加 -n 或 --dry-run 以仅检查它将执行的操作。
移除未追踪的文件:
git add .
git reset --hard HEAD
我刚刚想出并尝试了一个在这种情况下非常有效的生活技巧:
git add .
git reset --hard HEAD
注意! 在执行此操作之前,请务必提交任何必要的更改(即使是在未跟踪的文件中)。
git add .
git commit -m 'about to delete'
git reset --hard HEAD~
。 - joeytwiddlegit add . && git reset --hard HEAD
。 - thybzigit reset --hard
会将所有未提交但未被跟踪的文件重置为最新提交的状态。这就是为什么我们首先需要 git add .
- 这会将所有未被跟踪的文件添加到暂存区(以便它们也能被重置)。 - thybzi只有以下方法对我起作用:
git clean -ffdx
在所有其他情况下,我会收到一些子目录的消息“跳过目录”。-x
,只使用了 git clean -ffd
来避免删除 .gitignore
中的文件。 - Feckmoregit clean -f -d -x $(git rev-parse --show-cdup)
将清除整个仓库目录,无论你在哪个目录树中调用它。我经常使用它,因为它不强制你离开当前工作目录,并允许你在当前位置进行清理和提交。
请确保标志 -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
。
git clean
现在有一个交互模式!请参见我对另一个问题的答案:git 1.8.4+ - VonCgit status
命令,如果它显示有一个文件未被跟踪,并且你不想将该文件添加到版本库中,你可以直接在文件系统中删除或移动它。这样不会对你的本地仓库或 Git 造成任何损害。你也可以使用git clean
或以下答案中的某些变体,包括交互式版本,以仅删除选择的文件,但交互模式可能很繁琐。无论你做什么,一定要确保你理解git clean
将删除哪些内容,或使用--dry-run
让它告诉你而不会真正执行删除操作。 - LightCCrm files-to-be-deleted
。 - mhatch