在将新文件复制到分支之前,我想删除.git/
文件夹的所有当前目录的内容(除外)。
linux的命令是什么?
答案 0 :(得分:47)
重置索引很便宜,所以
git rm -rf .
git clean -fxd
然后您可以重置索引(使用git reset
)或直接检查新分支。
答案 1 :(得分:16)
使用find和prune选项。
find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null
<小时/> 修改:对于两个目录
.git
和dist
find . -path ./.git -prune -o \( \! -path ./dist \) -exec rm -rf {} \; 2> /dev/null
答案 2 :(得分:11)
正如Crayon在评论中提到的,简单的解决方案是将.git移出目录,删除所有内容,然后将其移回。但如果你想以奇特的方式进行,{{1}得到了你的回复:
find
我放在那里的第一行因为find -not -path "./.git/*" -not -name ".git" | grep git
find -not -path "./.git/*" -not -name ".git" -delete
,我总是想在运行find
之前仔细检查以确保它找到我的想法。
编辑:有一个脑死亡的时刻,不只是从我的终端复制。
Edit2:添加了-delete
,使其无法尝试删除-not -name ".git"
目录,并抑制错误。根据{{1}}尝试删除内容的顺序,它可能会在非空目录上失败。
答案 3 :(得分:4)
一种方法是使用rm -rf *
,它将删除文件夹中的所有文件,除了像.git
这样的点文件和点文件夹。然后,您可以逐个删除点文件和点文件夹,这样您就不会错过重要的点文件,例如.gitignore
,.gitattributes
。
另一种方法是将.git
文件夹移出目录,然后返回并删除文件夹的所有内容并移回.git
文件夹。
mv .git/ ../
cd ..
rm -rf folder/*
mv .git/ folder/
cd folder
答案 4 :(得分:2)
for i in `ls | grep -v ".git"` ; do rm -rf $i; done; rm .gitignore;
最后的额外rm
会移除特殊.gitignore
。如果您确实需要该文件,请将其取消。
答案 5 :(得分:-3)
find . -name .git
find . -not -name .git
find . -not -name .git -exec rm -vf {} \;
确保查找正在执行您想要的操作
如果要删除目录,请将rm命令更改为rm -rvf
我包含v
选项以查看已删除的文件。
如果要在删除文件之前确认这些文件 将find命令传递给文件并查看结果