我有我的仓库@ github。我在家里做了一些工作,并将其推送到github。它涉及一些文件和目录的删除。现在,我在工作箱中,该工作箱在删除文件和目录之前具有代码的副本。
我发布了以下内容:
git remote update
git checkout HEAD
git pull origin HEAD
它删除了它应该拥有的所有文件,但没有删除文件所在的目录。
两个问题:
- 为什么不删除目录?
- 我可以在当前状态下发出git命令来删除它们吗?
我有我的仓库@ github。我在家里做了一些工作,并将其推送到github。它涉及一些文件和目录的删除。现在,我在工作箱中,该工作箱在删除文件和目录之前具有代码的副本。
我发布了以下内容:
git remote update
git checkout HEAD
git pull origin HEAD
它删除了它应该拥有的所有文件,但没有删除文件所在的目录。
两个问题:
Answers:
Git不会跟踪目录,因此不会删除由于合并或其他更改而变为空的目录。但是,您可以使用git clean -fd
删除未跟踪目录(该-fd
标记的装置˚F奥尔塞去除未跟踪文件和d irectories)。
git clean
当然会。
-n
(空运行)而不是-f
首先运行命令,以便您可以看到要删除的内容。特别是因为不仅git clean -d
删除了那些麻烦的目录,而且删除了未跟踪的文件。
git clean
除非您通过该-x
选项,否则不会删除.gitignore中列出的文件。
作为大多数更改工作树的操作(拉,合并,签出等)的一部分,git会删除该操作将其清空的任何目录(即git删除了最后一个文件)。
git不会删除所有不完全为空的目录,因此,如果您隐藏或忽略了文件,那么仅仅因为git从该目录中删除了最后一个跟踪的文件,并不一定意味着git将能够删除该目录。git认为这不是错误情况,因此不会对此有所抱怨。
git checkout master
”,但是大多数人只会说“我已切换至/签出主机”。无论如何,当git说“已经是最新的”时。这意味着它什么也没做。git只会删除使其为空的目录。
git checkout
没有删除一个完全空的目录。
Git不会跟踪目录,文件(及其路径)。Git会创建这些路径中的所有目录,如果它们不存在,但(爽!),但它并不能删除它们,如果所有包含在路径中的文件被移动或删除(不冷静☹...但有原因)。
解决方案(一旦您拉出/快进/合并):
git stash --include-untracked
git clean -fd
git stash pop
如果您stash
以前不这样做clean
,则将丢失所有未跟踪的文件(不可逆转)。
注意:由于这也会清除所有被忽略的文件,因此您可能需要再次运行一些构建脚本来重新创建项目元数据(例如:)./gradlew eclipse
。这也会删除空目录,这些目录永远都不是git文件路径的一部分。
Git当前不跟踪目录(请参阅git wiki),也就是说,您既不能添加空目录,也不能git删除最终为空的目录。 (编辑:谢谢,曼妮,我错了!您不能添加空目录,但是git会删除由于其跟踪内容已删除而变为空的目录。)
至于删除空目录的命令:这取决于您的操作系统。
对于Linux,您可以使用,例如
find -depth -type d -empty -exec rmdir {} \;
但是,这将删除所有空目录!