GIT:如何从初始提交中删除文件夹及其内容?

GIT:如何从初始提交中删除文件夹及其内容?,git,git-commit,Git,Git Commit,如何从初始提交中删除文件夹及其内容 我有一个初始提交,有几个目录。然后很多人都是基于它的 例如: Commit A, having the following directories & files: A/aaa.txt B/bbb.txt C/ccc.txt A - B - C - D - E - F 我想从初始提交A中删除目录B&C。 然后 -使用B/bbb.txt创建B1分支。 -使用C/ccc.txt创建C1分支 最后,这棵树看起来是这样的: A(modified) - B1

如何从初始提交中删除文件夹及其内容

我有一个初始提交,有几个目录。然后很多人都是基于它的

例如:

Commit A, having the following directories & files:
A/aaa.txt
B/bbb.txt
C/ccc.txt

A - B - C - D - E - F
我想从初始提交A中删除目录B&C。 然后 -使用B/bbb.txt创建B1分支。 -使用C/ccc.txt创建C1分支

最后,这棵树看起来是这样的:

A(modified) - B1 - C1 - B - C - D - E - F
如何得到这个结果

谢谢

EDIT1:我只想从初始提交中删除目录。
因此,我认为它与另一个问题不同,并且不是重复的。

您不能仅从旧提交中删除目录。 如果您在初次提交后提交了几次,我认为最好的做法是:

  • 为每个目录创建一个新分支
  • 处理其分支中的目录
  • 合并主分支上的更新

如果您在初始提交之后立即提交,则可以执行git reset--soft以转到初始提交并保留更改。

尝试使用以下命令从根目录重新设置基址:

然后在第一次提交时使用编辑命令。

您不能修改任何现有提交。这是一个基本的Git保证:任何内容一旦保存,就会通过保存时生成的哈希ID以这种方式永远保存

您可以简单地停止使用任何现有的提交,当然也可以随时进行新的提交。因此,您需要进行一次新的提交,该提交几乎与提交
a
相同,但并不完全相同:

  • 提取现有提交
    A
  • 删除不需要的文件
  • 最后,创建一个新的根提交
    a'
    ,它在大多数情况下都是
    a
    的副本,除了那些文件现在已经不存在的事实
你现在有:

A--B--C--D--E--F   <-- old-master

A'   <-- new-master
显然,你还没做完。您现在必须将
C
复制到
C'
,复制方式与将
B
复制到
B'
相同,然后在其余提交中重复此操作。最终你会得到这样的结果:

A--B--C--D--E--F   <-- old-master

A'-B'-C'-D'-E'-F'  <-- new-master

A--B--C--D--E--F这是一个大项目。我有很多目录,很多提交,不能为每个目录创建新的分支。我记得,有一些历史重写功能,可能会用到。不知道是否与此案例相关。ok不知道,很遗憾,您无法从旧提交中删除dir,可能其他人为您提供了一个答案:)使用
git filter branch
,如中所述。下的可能重复:以交互方式从每个提交中删除文件只允许编辑注释,但不允许删除任何目录。@klor:Git不保存目录,只保存文件。稍后,当您提取提交时,如果Git必须这样做,它将创建一个目录来保存它们。如果删除目录中的所有文件,并从中进行新的提交,则得到的提交不会强制Git创建目录以提取文件。您可以使用“编辑”而不是“拾取”或“重写”来编辑提交内容。类似的内容将在拆分提交部分进行解释->
A--B--C--D--E--F   <-- old-master

A'-B'   <-- new-master
A--B--C--D--E--F   <-- old-master

A'-B'-C'-D'-E'-F'  <-- new-master