如何删除Git中未跟踪的文件?[duplicate]

js4nwp54  于 2023-03-06  发布在  Git
关注(0)|答案(8)|浏览(158)
    • 此问题在此处已有答案**:

(41个答案)
5天前关闭。
我正在一个分支上工作,比如说"实验性",我从主分支中分支出来,然后,我在实验性分支中生成一个用户模型,但是还没有将它们添加到索引中。
如果我想放弃最近添加到我的实验分支中的文件的所有更改,我应该怎么做?未跟踪的文件如下所示:

$ git status
 On branch new_chick
 Untracked files:
   (use "git add <file>..." to include in what will be committed)

       .project
       app/models/user.rb
       db/migrate/
       test/fixtures/users.yml
       test/unit/user_test.rb

我试图运行"git reset--hard",希望撤消所有这些更改,但上面提到的所有文件仍然显示出来。

f2uvfpb9

f2uvfpb91#

要删除未跟踪的文件/目录,请执行以下操作:

git clean -fdx

-f -力
-d -目录也是
-x -同时删除忽略的文件(如果不想删除忽略的文件,请不要使用此选项)

小心使用!

这些命令可以永久删除任意文件,这是您一开始没有想到的。请仔细检查并阅读此答案下面的所有注解和--help部分等,以便了解所有细节来微调您的命令,并确保获得预期的结果。

lp0sw83n

lp0sw83n2#

用户交互式方法:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y

-i表示交互式
-f表示力
-d表示目录
-x表示忽略的文件(如果需要,请添加)

注意:*添加-n或**--dry-run**以检查它将执行什么操作。*

nwsw7zdq

nwsw7zdq3#

删除未跟踪的文件:
git clean -f
要删除未跟踪的目录,请用途:
git clean -f -d
为防止心脏骤停,使用
git clean -n -f -d

qq24tv8q

qq24tv8q4#

这些都是未跟踪的文件,这意味着git没有跟踪它们,列出它们只是因为它们不在git ignore文件中,因为它们没有被git跟踪,所以git reset不会碰它们。
如果你想清除所有未被跟踪的文件,最简单的方法是git clean -f(如果你想看看它会破坏什么,而实际上什么也不删除,那么就用git clean -n)。

iugsix8n

iugsix8n5#

您还可以通过另一种方式返回到本地存储库的前一个状态:
1.使用git add将未跟踪的文件添加到临时区域。
1.返回到具有git reset --hard的本地存储库的先前状态。

wfypjpf4

wfypjpf46#

营救你的命令是git clean

9gm1akwq

9gm1akwq7#

好吧,我有类似的问题。我已经采取了最新的,但有一些变化,在本地由于合并是不是发生在一个特定的文件。该文件是untracked,我不想让他们,所以我所做的是-
$ git checkout 文件路径/文件名
filepath -我执行git bash的位置。然后当我执行最新的更改时,这些更改就可用了

dba5bblo

dba5bblo8#

虽然git clean工作得很好,但我仍然发现使用我自己的脚本来清理git repo很有用,它有一些优点。
这显示了一个要清理的文件列表,然后交互式地提示是否清理。这几乎总是我想要的,因为每个文件的交互式提示变得乏味。
它还允许手动过滤列表,当有你不想清理的文件类型(并且有理由不提交)时,这很方便。
git_clean.sh

#!/bin/bash
readarray -t -d '' FILES < <(
    git ls-files -z --other --directory |
        grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi

echo "Dirty files:"
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

相关问题