如何删除文件夹,但使用Git将文件保留在其中?
例如,假设我的存储库文件夹(RepoFolder / MyFolder)下有一个名为'MyFolder'的文件夹,在'MyFolder'内有文件'file1'和'file2'(RepoFolder / MyFolder / file1 file2)]
我只想删除“ MyFolder”文件夹,并将文件“ file1”和“ file2”保留在“ RepoFolder”下
这些评论可能是您想要的答案:
git mv MyFolder/* .
接着是删除现在为空的文件夹。
但是请注意,您正在部分地操作work-tree中的文件和文件夹。 Git不存储您的工作树中的内容。相反,Git将您告诉Git复制的内容存储到Git的index。
这就是一直运行git add
的意义:每次运行的git add
都会告诉Git:将其复制到索引中。您不能直接处理索引中的文件:它们采用特殊的仅Git格式。您需要可以处理的副本。 Git将它们放在您的工作树中。但是Git使new从索引提交,而不是从工作树提交。
索引中和Git中的文件不是in文件夹。他们只是长名称带有斜线。也就是说,在索引中,您当前有MyFolder/file1
-这是file,没有文件夹,只有一个名为MyFolder/file1
的文件和MyFolder/file2
。如果您现在进行提交,则[[commit也将具有那些文件名以及这些文件名。
in
提交时,有一个名为super/calli/fragial/istic/expi/ali/docious
的文件,Git可能必须告诉您的计算机制作文件夹super
(在.
),calli
(在super
中)等等,以便放入名为docious
的文件。 Git知道您的计算机要求将文件放入文件夹中,而不只是具有长名称。 Git将根据需要make这些文件夹。但是Git从未stored文件夹!它只是存储了一个长名的文件。无论如何,如果您使用git mv MyFolder/file1 file1
将MyFolder/file
重命名为file1
,以便您的[[computer将文件移出文件夹,Git现在在Git的索引中的名称为file1
,并且在工作树中有一个名为file1
的文件。对file2
重复,现在MyFolder
为空。如果Git在Git的索引中没有名称以MyFolder/
开头的文件,则Git将不再在工作树中的make目录MyFolder
。但是Git也不会remove它:您必须自己做。
file1
和file2
的文件,因此您进行的next
提交将包含该名称的文件。current提交继续具有其中包含MyFolder/file1
和MyFolder/file2
。如果以后再返回并将此提交提取到您的工作树中,Git将在必要时创建MyFolder/
。)