我想在将新文件复制到分支之前删除当前目录的所有内容,除了.git/
文件夹。
这个操作用什么Linux命令?
重置索引的成本很低,因此
git rm -rf .
git clean -fxd
接着你可以通过使用git reset
命令来重置索引或者直接切换到新分支。
git reset
和git checkout
都无法正常工作。我必须使用git reset --hard
。 - Trần Việt Hoànggit reset --hard
作为第一个命令会有任何好处吗? - Devin Rhodegit update-ref -d refs/heads/
- nextloop使用查找和修剪选项。
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
find
选项-delete
而不是执行rm
呢? - Antonio-delete
选项的文档中可以得知: 由于-delete隐含了-depth,因此您不能有用地同时使用-prune和-delete。
- P̲̳x͓L̳正如Crayon在评论中提到的那样,简单的解决方案是将.git移出目录,删除所有内容,然后再将其移回来。但如果你想以花哨的方式解决问题,find
可以帮助你:
find -not -path "./.git/*" -not -name ".git" | grep git
find -not -path "./.git/*" -not -name ".git" -delete
我加入了第一行代码是因为使用find
命令时,我总是想要在运行-delete
之前再次确认它是否找到了我认为的那个文件。
编辑:添加了-not -name ".git"
,这将防止尝试删除.git
目录并抑制错误。根据find
尝试删除的顺序,它可能无法删除非空目录。
-prune
。这是完成相同任务的不同方式。至于第一行:任何时候运行 find -delete
,都应该先运行没有 -delete
的命令,以确保您不会做出意外的操作。 - cincodenadaprojects/project1/.git
和projects/project2/.git
,然后可以直接在 projects/
目录中运行此命令。 - Daniel F一种方法是使用rm -rf *
,将删除文件夹中除点文件和点文件夹(如.git
)之外的所有文件。然后您可以逐个删除点文件和点文件夹,以便不会错过重要的点文件,如.gitignore
、.gitattributes
等。
另一种方法是将您的.git
文件夹移出目录,然后返回并删除文件夹的所有内容,最后再将.git
文件夹移回去。
mv .git/ ../
cd ..
rm -rf folder/*
mv .git/ folder/
cd folder
rm -r *
是最好的解决方案。保留 .gitignore 和其他类似的文件可能非常重要。 - Matthew Mitchellfor i in `ls | grep -v ".git"` ; do rm -rf $i; done; rm .gitignore;
结尾处的附加rm
将会删除特殊的.gitignore
文件。如果你需要该文件,请去掉这个附加项。
.git
文件之外的所有文件,而这些文件似乎是您正在删除的文件。 - Anshul Goyaltracker files
的历史记录。git rm -rf .
git clean -fxd
git update-ref -d refs/heads/master #or main or ...
find . -name .git
find . -not -name .git
find . -not -name .git -exec rm -vf {} \;
确保查找功能符合您的要求
如果您想删除目录,请将rm命令更改为rm -rvf
,我包含了v
选项以查看被删除的文件。
如果您想在删除文件之前确认它们,请将find命令导入文件并查看结果。
find . -not -name .git | grep git
命令-你会发现你正在尝试删除.git
目录中的所有文件,因为它们的文件名中没有“.git”。你需要使用-path
和通配符来解决这个问题。 - cincodenadafind
命令的工作方式。 - cincodenada
rm -rf *
命令,这将跳过所有以点开头的文件,然后根据需要手动删除剩余的文件。如果你想更加高级一些,可以使用find
命令,但有时只需执行ls -A > /tmp/doit
命令,然后编辑/tmp/doit
文件以删除除.git
以外的所有内容,这通常更容易实现。 - torek.git
文件夹暂时移动到另一个文件夹中,然后删除所有内容,最后再将其移回原来的位置。 - CrayonViolentgit clone -n -b <branch> <repository> <directory>
。 - Mike Shiyan