为什么git clean -f不会删除所有未跟踪的文件?

时间:2015-11-05 10:47:09

标签: git git-clean

今天我点了这个:

% git checkout another_branch
error: The following untracked working tree files would be overwritten by checkout:
        __version__.txt
        alembic.ini
        alembic/README
        alembic/env.py
        alembic/script.py.mako
        folder1/file1
        folder2/file2
        ....
Please move or remove them before you can switch branches.
Aborting

好的,我将删除未跟踪的文件:

% git clean -f
Not removing alembic/
Not removing tools/maintenance/

但是,似乎并未删除所有未跟踪的文件:

% git checkout another_branch
error: The following untracked working tree files would be overwritten by checkout:
        alembic/README
        alembic/env.py
        alembic/script.py.mako
Please move or remove them before you can switch branches.
Aborting

奇怪的是,首先git checkout another_branch git知道后来抱怨的那些特定的未跟踪文件(alembic/READMEalembic/env.pyalembic/script.py.mako)。

那么为什么git没有删除它们呢?

2 个答案:

答案 0 :(得分:1)

有两种未跟踪的文件:未跟踪的文件和被忽略的文件。

git clean运行时(-f只是为了覆盖“安全”配置选项),git只会删除未跟踪的文件,当以git clean -x运行时,它会删除未跟踪的文件忽略了文件。

对于结帐问题,它可能是由两个分支中的不同.gitignore文件触发的。

答案 1 :(得分:0)

目录是否包含.git个子目录或文件?

  

-f, - force

     

如果Git配置变量clean.requireForce未设置为false,则为git              clean将拒绝删除文件或目录,除非给出-f,-n或-i。混帐              将拒绝删除.git子目录或文件的目录,除非秒              -f给出。这也影响了git子模块的存储区域              除非给出-f两次,否则不会删除.git / modules /下的子模块。