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

Remove folder but not the files within it

如何使用 Git 删除文件夹但保留其中的文件?

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

我只想删除“MyFolder”文件夹并将文件“file1”和“file2”保留在“RepoFolder”下

评论里有你想要的答案:

git mv MyFolder/* .

然后删除现在为空的文件夹。

但是请注意,您在某种程度上正在操纵 工作树 中的文件和文件夹。 Git 不存储您的工作树中的内容;相反,Git 存储您告诉 Git 复制到 Git 的 index.

的内容

这就是 运行ning git add 一直以来的内容:每 git add 你 运行 告诉 Git: 复制这到索引。您不能直接处理索引中的文件:它们采用特殊的 Git-only 形式。您需要 可以 使用的副本。 Git 将它们放入您的工作树中。但是 Git 使 new 从索引提交,而不是从您的工作树提交。

索引中的文件和 Git 中的文件不在 文件夹中。他们只是有带斜线的长名字。也就是说,在索引中,您当前有 MyFolder/file1——这是一个 文件,没有文件夹,它只是一个名为 MyFolder/file1 的文件——和 MyFolder/file2.如果您现在提交,提交 将包含那些文件,以及那些长名称。

如果当你告诉 Git 提取一些提交,并且 那个提交中,有一个文件名为 super/calli/fragial/istic/expi/ali/docious,Git 可能必须告诉您的 计算机 创建文件夹 super(在 . 中)、calli(在 super 中),等等on,以便放入名为 docious 的文件。 Git 了解您的计算机要求将文件放入文件夹,而不仅仅是长名称。 Git 将根据需要 制作 这些文件夹。但是 Git 从未 存储过 文件夹!它只是存储了一个长名称的文件。

无论如何,如果您使用git mv MyFolder/file1 file1MyFolder/file重命名为file1,那么您的计算机就会将文件移出文件夹 Git 现在在 Git 的索引中具有名称 file1,并且您的工作树中具有名为 file1 的文件。对 file2 重复,现在大概 MyFolder 是空的。如果 Git 在 Git 的索引中没有名称以 MyFolder/ 开头的文件,那么 Git 将不会 创建 目录MyFolder 在您的工作树中。但是 Git 也不会 删除 它:你必须自己做。

(因为 Git 的索引 确实 中有名为 file1file2 的文件, 下一个您所做的 提交将包含该名称的文件。当前 提交继续包含 MyFolder/file1MyFolder/file2。如果将来,你返回并将此提交提取到你的工作树中,Git 将创建 MyFolder/ 如果必须的话。)