我如何从当前工作树中删除未跟踪的本地文件 ?


当前回答

这可以用一个 shell 脚本来完成, 我用这个笔记本来列出要删除的内容, 然后让我确认操作 。

这是有用的,因为我有时有补丁 或其他文件,我想检查 之前擦走一切。

#!/bin/bash
readarray -t -d '' FILES < <(git ls-files -z --other --directory)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi
echo -e "Dirty files:\n"
printf '  %s\n' "${FILES[@]}"
DO_REMOVE=0
while true; do
    echo ""
    read -p "Remove ${#FILES[@]} files? [y/n]: " choice
    case "$choice" in
        y|Y )
            DO_REMOVE=1
            break ;;
        n|N )
            echo "Exiting!"
            break ;;
        * ) echo "Invalid input, expected [Y/y/N/n]"
            continue ;;
    esac
done

if [ "$DO_REMOVE" -eq 1 ];then
    echo "Removing!"
    for f in "${FILES[@]}"; do
        rm -rfv -- "$f"
    done
fi

其他回答

使用git reset HEAD <file>以卸开一个文件

要删除完整更改git 清洁 -f -d

$ git clean -f -d
Removing client/app/helpers/base64.js
Removing files/
Removing package.json.bak

where 
-f is force 
-d is a directory 

OK,OK, OK, OK, OK, OK, OK, OK, OK,OK, OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,删除删除未跟踪的自定义文件及文件夹容易使用git在命令行中,按这样做:

git clean -fd

双检查在这样做之前, 它会删除文件和文件夹, 而不创建任何历史...

在本案中-f代表武力和-d代表目录...

所以,如果只删除文件,您可以使用-f仅 :

git clean -f

如果您想要删除删除(目录) 和文件, 您只能删除未跟踪的目录和文件 :

git clean -fd

还有,你也可以用-x添加被 git 忽略的文件。 如果您想要删除所有文件, 这将很有帮助 。

并添加-igit 请求您逐个删除文件的许可 。

如果您不确定并想要先检查事项,请添加-n旗帜。

使用使用-q如果您不想在成功删除后看到任何报告。

我还创造了下面的图像 让它更令人难忘 尤其是我见过很多人混淆-f有时是用来清理文件夹或把它混为一谈的!


deleting unwanted untracked files and folder

使用使用git clean -f -d以确保目录目录目录目录也删除。

  1. 不要删除任何东西, 只显示会做什么。

    git clean -n
    

    git clean --dry-run
    
  2. 除未跟踪的文件外,删除未跟踪的目录。如果一个未跟踪的目录由不同的 Git 仓库管理,则默认不会删除。使用该目录。-f如果您真的想要删除此目录, 选项将两次 。

    git clean -fd
    

然后您可以检查您的文件是否真的已删除git status.

更好的方法就是使用:干净干净

git clean -d -x -f

这将删除未跟踪的文件, 包括目录(-d)git (-x).

另替换-f参数和-n要执行 a/dry-run-i用于交互式模式,它将告诉您要删除什么。