有没有办法从git根节点删除多余的源文件?

时间:2018-11-01 15:34:32

标签: git

我有一个孤立的根节点,其中有来自另一个根节点的额外文件。有没有办法删除孤立根节点中的多余文件,就像它们从未存在过一样,但不触摸主根节点?

1 个答案:

答案 0 :(得分:1)

这里有几个要点将指导您:

  • 提交由其唯一的哈希ID标识。分支名称仅包含一个特定提交的哈希ID,将被视为该分支上的 last 提交。每个提交都存储其父级的哈希ID。

  • 每个提交都是完整的快照。也就是说,提交不包含更改,因此根提交没有什么特殊之处,除了它没有父级。

  • 任何提交的任何部分都无法更改。

  • 但是,可以提取任何提交(未冻结到索引中,通常也冻结到工作树中)。可以修改提取的,未冻结的提交,并且可以使用新索引进行 new 提交,当然,该提交将具有不同的哈希ID。

因此,如果您有:

A  <-B  <-C   <-- master1

D  <-E   <-- master2

并且您不喜欢提交D中的快照,您可以简单地提取提交D并在没有父项的情况下进行新提交F,因此F是新的根提交:

$ git checkout master2
$ git checkout --orphan master3
$ git rm ...
$ git commit -m 'make commit F'

导致:

A  <-B  <-C   <-- master1

D  <-E   <-- master2

F   <-- master3

请注意,如果要将E替换为master2,现在必须复制提交master3的效果:

$ git cherry-pick master2

给予:

A  <-B  <-C   <-- master1

D  <-E   <-- master2

F  <-E'  <-- master3

您现在可以删除master2并将master3重命名为master2。对于任何不关注哈希ID的人,仅查看分支名称,它现在看起来似乎已经修改了提交D,似乎是。 (您没有,而且像Git一样,任何关注哈希ID 的人都将知道这一点。)