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


当前回答

对于我来说,只有下一个工作:

git clean -ffdx

在所有其他情况下,我收到一些子办公室的“Skipping Directory”消息。

其他回答

正常的 git 清洁命令不会用我的 git 版本 2.9.0.windows.1 删除未追踪的文件。

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!

要删除未追踪的文件,您应该首先使用命令查看将受清洁影响的文件。

git clean -fdn

这将向您展示将被删除的文件列表. 现在实际上删除这些文件使用这个命令:

git clean -fd

git-clean 是你正在寻找的,它被用来从工作树中删除未追踪的文件。

这可以用一个阴影脚本进行,我使用这个脚本列出什么将被删除,然后让我确认操作。

这是有用的,因为有时我有插件或其他文件我会喜欢检查之前删除一切。

#!/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 存储库和所有子模块重复 以下命令将清除当前 git 存储库和所有子模块重复: (git clean -d -x -f& git submodule foreach --recursive git clean -d -x -f)