Git clean不清理未跟踪的文件

x4shl7ld  于 2023-04-19  发布在  Git
关注(0)|答案(7)|浏览(148)

我得到了“以下未跟踪的工作树文件将被覆盖 checkout ...请移动或删除他们之前,你切换分支”错误。
常见的修复似乎是git clean
当我输入它的时候,我没有得到任何错误,但是什么也没有发生。当我去 checkout 另一个分支的时候,我得到了和上面一样的错误。
为什么git clean什么都不做?
更新:
更多信息. git -ngit -f做完全相同... nothing.

qzwqbdag

qzwqbdag1#

如果你想清理未被跟踪的文件,使用下面的命令。但是,在运行这个命令之前要小心,因为它会擦除你的工作区,索引,HEAD。

git reset --hard

我认为你的工作区中有未跟踪的目录或gitignore被忽略的文件(构建文件)。你可以通过下面的命令删除它们。

git clean -dfx

-d
除了删除未跟踪的文件外,还可以删除未跟踪的目录。如果未跟踪的目录由其他Git仓库管理,则默认情况下不会删除。如果确实要删除这样的目录,请使用-f选项两次。
-f -力
如果Git配置变量clean.requireForce没有设置为false,git clean将拒绝删除文件或目录,除非给出-f,-n或-i。Git将拒绝删除带有.git子目录或文件的目录,除非给出第二个-f。
-x
不要使用从.gitignore(per directory)〉和$GIT_DIR/info/exclude读取的标准忽略规则,但仍然使用-e〉选项中给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。这可以用来(可能与git reset结合使用)创建一个原始的工作目录来测试一个干净的构建。
更多信息git clean

5m1hhzi4

5m1hhzi42#

与其他注解所指定的一样,您确实需要添加-f标志。
但是您可能遇到问题,不是因为您没有指定--force,而是因为您在不同的子目录中。
例如,如果我的git仓库位于/myrepo/.git中
和子目录/myrepo/untracked/file. txt中的未跟踪文件,
但我的终端当前的工作目录是/myrepo/src/。
git clean -fd将不起作用。在运行命令之前,您需要cd到项目根目录。
TL;DR:git clean -fd显然只清理终端当前工作目录下未被跟踪的文件和目录。

20jt8wwn

20jt8wwn3#

尝试使用

git clean -fd

尝试隐藏更改,

git stash

如果你想接受所有的改变

git stash apply
5sxhfpxr

5sxhfpxr4#

这可能不是在OP的情况下发生的情况。但是我也遇到了同样的问题。在我的情况下,没有被清理的目录是我添加的子模块,但我随后git重置了它。我必须从.gitmodules.git/config.git/modules/<path to submodule>中删除所有跟踪它的痕迹,以便git clean删除它,即使git status识别它为未跟踪。

px9o7tmv

px9o7tmv5#

在我看来,你需要指定-n或-f。从手册页:

OPTIONS

   -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.
kd3sttzy

kd3sttzy6#

我猜这是因为git clear -f不会递归到untracked目录,即使文档中写着:
从当前目录开始,通过递归删除不受版本控制的文件来清理工作树。
...
-d文档澄清了这一困惑:
通常情况下,当指定no时,git clean不会递归到未被跟踪的目录中,以避免删除太多。指定-d也会递归到这些目录中。
...

dm7nw8vv

dm7nw8vv7#

我总是使用git clean -df -fgit clean -dfx -f(如果我想删除忽略的文件),因为这是git的官方文档所说的:

-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 or -i. Git will refuse to modify untracked nested git  
repositories (directories with a .git subdirectory) unless a second - 
f is given.

相关问题