Git 删除文件夹,但不删除其中的文件
如何使用Git删除文件夹,但将文件保留在其中 例如,假设我在我的存储库文件夹(RepoFolder/MyFolder)下有一个名为“MyFolder”的文件夹,在“MyFolder”内有文件“file1”和“file2”(RepoFolder/MyFolder/file1 file2)Git 删除文件夹,但不删除其中的文件,git,directory,subdirectory,Git,Directory,Subdirectory,如何使用Git删除文件夹,但将文件保留在其中 例如,假设我在我的存储库文件夹(RepoFolder/MyFolder)下有一个名为“MyFolder”的文件夹,在“MyFolder”内有文件“file1”和“file2”(RepoFolder/MyFolder/file1 file2) 我只想删除“MyFolder”文件夹,并在“RepoFolder”下保留文件“file1”和“file2”这些注释可能是您想要的答案: git mv MyFolder/* . 然后删除现在为空的文件夹 但是,请
我只想删除“MyFolder”文件夹,并在“RepoFolder”下保留文件“file1”和“file2”这些注释可能是您想要的答案:
git mv MyFolder/* .
然后删除现在为空的文件夹
但是,请注意,您在一定程度上正在操作工作树中的文件和文件夹。Git不会存储工作树中的内容;相反,Git存储您告诉Git复制到Git索引的内容
这就是一直运行git add
的目的:您运行的每个git add
都告诉git:将其复制到索引中。您不能直接处理索引中的文件:它们是一种特殊的Git格式。您需要可以使用的副本。Git会把这些放在你的工作树中。但是Git通过索引而不是工作树进行新的提交
索引和Git中的文件不在文件夹中。他们只是有长长的名字和斜线。也就是说,在索引中,您当前有MyFolder/file1
-这是一个文件,没有文件夹,只是一个名为MyFolder/file1
-和MyFolder/file2
的文件。如果您现在进行提交,那么提交将包含这些文件以及那些长名称
如果您告诉Git提取一些提交,并且在该提交中有一个名为super/calli/fragial/istic/expi/ali/docious
,Git可能必须告诉您的计算机制作文件夹super
(在
)、calli
(在super
)等等,以便放入名为docious
的文件。Git知道您的计算机要求文件进入文件夹,而不仅仅是长名称。Git将根据需要创建这些文件夹。但Git从未存储过这些文件夹!它只是存储了一个长名称的文件
在任何情况下,如果您使用git mv MyFolder/file1 file1
将MyFolder/file
重命名为file1
,以便您的计算机将文件移出文件夹,git现在在git的索引中具有名称file1
,并且您的工作树中具有名为file1
的文件。对file2
重复上述操作,现在假定MyFolder
为空。如果Git在Git的索引中没有名称以MyFolder/
开头的文件,Git将不再在工作树中创建目录MyFolder
。但Git也不会删除它:您必须自己删除它
(由于Git的索引中确实包含名为
file1
和file2
的文件,因此您进行的下一次提交将包含该名称的文件。当前提交中仍然包含MyFolder/file1
和MyFolder/file2
。如果将来您返回并将此提交提取到工作树中,Git将创建git-mv-MyFolder/*.
然后git-rm-rf-MyFolder
您不需要从git中删除目录,因为git首先不跟踪目录。(你可能想从你的工作目录中删除空目录。)非常感谢!正如@chepner提到的,我不必删除我的文件夹,它会自动从我的repo中消失