12

我收到“以下未跟踪的工作树文件将被结帐覆盖......请在切换分支之前移动或删除它们”错误。

常见的修复方法似乎是git clean

当我输入它时,我没有收到任何错误,但没有任何反应。当我去检查另一个分支时,我得到了与上面相同的错误。

有什么理由说明为什么git clean绝对什么都不做?

更新:

更多信息。git -ngit -f做同样的事情......什么都没有。

4

5 回答 5

15

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

git reset --hard

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

git clean -dfx

-d

除了未跟踪的文件之外,还删除未跟踪的目录。如果未跟踪的目录由不同的 Git 存储库管理,则默认情况下不会将其删除。如果您真的想删除这样的目录,请使用 -f 选项两次。

-f --force

如果 Git 配置变量 clean.requireForce 没有设置为 false,git clean 将拒绝删除文件或目录,除非给定 -f、-n 或 -i。除非给出第二个 -f,否则 Git 将拒绝删除带有 .git 子目录或文件的目录。

-X

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

更多信息git clean

于 2018-08-16T11:26:59.000 回答
10

与其他注释一样,您确实需要添加 -f 标志。

但是您可能遇到问题不是因为您没有指定 --force,而是因为您位于不同的子目录中。

例如,如果我的 git 存储库位于 /myrepo/.git

和子目录 /myrepo/untracked/file.txt 中的未跟踪文件,

但我终端的当前工作目录是/myrepo/src/。

git clean -fd 将不起作用。在运行命令之前,您需要 cd 到项目根目录。

TL;DR: git clean -fd 显然只清理终端当前工作目录及其下方的未跟踪文件和目录。

于 2020-02-10T19:35:59.963 回答
2

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

于 2020-03-03T05:41:30.827 回答
2

尝试使用

git clean -fd

尝试隐藏更改,

git stash

如果您想使用所有更改,

git stash apply
于 2018-08-16T07:16:32.710 回答
0

在我看来,您需要指定-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.
于 2018-08-15T21:07:30.447 回答