我如何从当前工作树中删除未跟踪的本地文件 ?
当前回答
这可以用一个 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 clean -f -d
以确保目录目录目录目录也删除。
不要删除任何东西, 只显示会做什么。
git clean -n
或
git clean --dry-run
除未跟踪的文件外,删除未跟踪的目录。如果一个未跟踪的目录由不同的 Git 仓库管理,则默认不会删除。使用该目录。
-f
如果您真的想要删除此目录, 选项将两次 。git clean -fd
然后您可以检查您的文件是否真的已删除git status
.
uggested 命令从 git docs 删除未跟踪的文件是git 干净
git 干净- 从工作树中移除未跟踪的文件
建议的方法:通过使用git clean -i
这样我们就可以控制它。让我们看看剩下的选择。
可用的选项 :
git clean
-d -f -i -n -q -e -x -X (can use either)
解释:
1. - d. d. 与
除未跟踪的文件外, 删除未跟踪的目录。 如果未跟踪的目录由不同的 Git 仓库管理, 默认情况下不会删除。 如果您真的想要删除此目录, 请两次使用 - f 选项 。
2.f, -- 力
如果 Git 配置变量为清洁. require Force 不设假, 除非给 -f, n 或 -i , git clean 将拒绝运行 。
3 -i, -- 互动
以交互方式显示要做什么和清除文件。 详情请见“ 互动模式 ” 。
-n, --dry-run
不要删除任何东西, 只显示会做什么。
- 5q, - 安静
保持安静, 只报告错误, 而不是成功删除的文件 。
-e, --clucte=
除了在.gitignore(每个目录)和$GIT_DIR/info/exclude中发现的图案外,还认为这些图案属于一套现行无视规则。
7. -x
不要使用从.gitignore( 每一个目录) 和 $GIT_ DIR/ info/ exclude 读取的标准忽略规则, 但是仍然使用给定的 - e 选项的忽略规则。 这样可以删除所有未跟踪的文件, 包括建材产品 。 这可以用来( 可能与 Git 重设一起) 创建一个纯净的工作目录以测试清洁的构建 。
8. -X8 -X
只删除被 Git 忽略的文件。 这也许有助于从零开始重建一切, 但保存手动创建的文件 。
git clean -f
将会从当前 git 中删除未跟踪的文件
git clean -fd
当您想要删除目录和文件时, 这将只删除未跟踪的目录和文件
我在这里没有使用最流行的答案- git 不删除存储处的未追踪文件 。 不知道为什么 。 这是超简化的答案, 没有特别的 GIT 指令 !
任务: 从 git 仓库删除未跟踪的文件 :
- 将本地工程文件夹中的文件和文件夹移动一段时间
- 删除 . gitignore 中关于此承诺的文件和文件夹的所有行
- Git 添加 。
- Git 承诺 -m “从未跟踪的文件中清除存储库”
- Git 推动
从仓库中删除了所有文件和文件夹 。
如果您需要的话, 请在本地主机上恢复它们 :
- 将所有已临时移至本地工程文件夹的文件和文件夹再移到本地工程文件夹
- 将这些文件和文件夹的所有行后移到. gitignore
- Git 添加 。
- Git 承诺 -m “检查或在 Git 仓库中不再出现文件”
- Git 推动
你完蛋了! 你完蛋了! You are done!
如果未跟踪的目录是自有的 git 仓库( 如子模块) , 您需要使用-f
两次:
git clean -d -f -f
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?