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


当前回答

我认为最安全、最容易的方式就是这样!

git add .
git stash 

更多信息 https://www.atlassian.com/git/tutorials/saving-changes/git-stash#stashing-your-work

其他回答

更好的方法是使用: git clean

git clean -d -x -f

这将删除未追踪的文件,包括目录(d)和由 git(x)忽略的文件。

此外,将 -f 论点替换为 -n 以进行干燥运行或 -i 为互动模式,它会告诉你什么将被删除。

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

实际上不要删除任何东西,只需显示会发生什么。 git clean -n 或 git clean --dry-run 除去不跟踪的目录除了不跟踪的文件. 如果一个不跟踪的目录由另一个 Git 存储库管理,它不会默认删除。

然后,您可以检查您的文件是否真的失去了 git 状态。

这是我一直使用的:

git clean -fdx

对于一个非常大的项目,你可能想运行它几次。

命令从 git docs 删除 Untracked 文件是 git clean

git clean - 从工作树中删除未追踪的文件

可用的选项:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

解释:

1 - D

除未追踪的目录外,除未追踪的文件外,除未追踪的目录外,除未追踪的目录外,除非由另一个 Git 存储库管理,则不会默认删除。

如果 Git 配置变量 clean.requireForce 未设置为虚假,则 git clean 将拒绝运行,除非提供 -f、 -n 或 -i。

3 -i, - 互动

4 -n, -dry-run

5 -q, - 放心

保持沉默,只报告错误,但不是成功删除的文件。

除了在.gitignore (每个目录) 和 $GIT_DIR/info/exclude 中找到的外,还考虑这些模式在无效的规则中。

7、X

8、X

删除仅由 Git 忽略的文件,这可能有助于重建一切,但保持手动创建的文件。

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

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

#!/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