Git 删除文件夹,但不删除其中的文件

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/* . 然后删除现在为空的文件夹 但是,请

如何使用Git删除文件夹,但将文件保留在其中

例如,假设我在我的存储库文件夹(RepoFolder/MyFolder)下有一个名为“MyFolder”的文件夹,在“MyFolder”内有文件“file1”和“file2”(RepoFolder/MyFolder/file1 file2)


我只想删除“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将创建)de>MyFolder/如果必须的话。)

git-mv-MyFolder/*./;rm-rf-MyFolderOne更新到@avejidah
git-mv-MyFolder/*.
然后
git-rm-rf-MyFolder
您不需要从git中删除目录,因为git首先不跟踪目录。(你可能想从你的工作目录中删除空目录。)非常感谢!正如@chepner提到的,我不必删除我的文件夹,它会自动从我的repo中消失