【问题标题】:Git clean is not cleaning untracked filesGit clean 没有清理未跟踪的文件
【发布时间】:2018-08-15 21:05:14
【问题描述】:

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

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

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

git clean 绝对不会做任何事情的任何理由?

更新:

更多信息。 git -ngit -f 做的完全一样……什么都没有。

【问题讨论】:

  • 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
  • @WilliamPursell 谢谢。我更新了我的问题。唉,-f-n 也不会导致任何事情发生。
  • git status 显示什么?
  • 您从哪个目录运行git clean?它只会清理当前工作目录及以下。
  • 这些文件是否被忽略?您是否尝试添加-x

标签: git git-clean


【解决方案1】:

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

git reset --hard

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

git clean -dfx

-d

除了未跟踪的文件之外,还删除未跟踪的目录。如果 untracked 目录由不同的 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

【讨论】:

    【解决方案2】:

    与其他 cmets 指定的一样,您确实需要添加 -f 标志。

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

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

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

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

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

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

    【讨论】:

    • 谢谢!这是我的问题(在纱线工作区单回购中工作时)
    【解决方案3】:

    尝试使用

    git clean -fd
    

    尝试隐藏更改,

    git stash
    

    如果您想使用所有更改,

    git stash apply
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我无法运行 git clean(可能是由于 git 模块问题);我最终做了:“rm -rf ; git reset --hard”
      • 就我而言,我使用git mv 移动了一些子模块。我在.gitmodules.git 中找不到任何看起来应该删除的内容,所以我只是手动删除了这些目录。很烦人。
      【解决方案5】:

      在我看来,您需要指定 -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.
      

      【讨论】:

      • 我更新了我的问题。唉,-f-n 也不会导致任何事情发生。
      • 感谢分享。就我而言,我必须添加 两个 -f 参数才能删除所有我忽略的文件和目录。
      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2017-03-15
      • 1970-01-01
      • 2015-01-11
      • 2012-01-18
      • 2022-01-01
      相关资源
      最近更新 更多