[英]how to remove untracked files in Git?
我正在一个分支上工作,比如说我从主分支分支出来的“实验”分支。然后,我在实验分支中生成一个用户模型,但还没有将它们添加到索引中。
如果我想丢弃最近添加到我的实验分支中的文件的所有更改,我该怎么办? 未跟踪的文件如下所示:
$ 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”以撤消所有这些更改,但上面的所有文件仍然显示。
任何人请对我有所了解?
要删除未跟踪的文件/目录,请执行以下操作:
git clean -fdx
-f - 力
-d - 也是目录
-x - 也删除被忽略的文件(如果您不想删除被忽略的文件,请不要使用它)
谨慎使用!
这些命令可以永久删除您最初没有想到的任意文件。 请仔细检查并阅读此答案下方的所有评论和 --help 部分等,以便了解所有详细信息以微调您的命令并确保获得预期结果。
用户交互方式:
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来检查它会做什么。
这些是未跟踪的文件。 这意味着 git 没有跟踪它们。 它只是列出它们,因为它们不在 git ignore 文件中。 因为它们没有被 git 跟踪,所以git reset
不会接触它们。
如果您想清除所有未跟踪的文件,最简单的方法是git clean -f
(如果您想查看它会破坏什么而不实际删除任何内容,请改用git clean -n
)。 否则,您可以手动删除不需要的文件。
删除未跟踪的文件:
git clean -f
要删除未跟踪的目录,请使用:
git clean -f -d
为防止任何心脏骤停,请使用
git clean -n -f -d
您还可以通过另一种方式返回本地 repo 的先前状态:
git add
将未跟踪的文件添加到暂存区。git reset --hard
返回本地存储库的先前状态。您的救援命令是git clean
。
嗯,我有类似的问题。 我采取了最新的但由于合并没有发生在特定文件上,所以本地发生了一些变化。 该文件未被跟踪,我不想要它们,所以我所做的是-
$ git checkout 文件路径/文件名
文件路径 - 我执行 git bash 的位置。 然后当我采用最新的更改时
虽然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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.