我有一个孤立的根节点,其中有来自另一个根节点的额外文件。有没有办法删除孤立根节点中的多余文件,就像它们从未存在过一样,但不触摸主根节点?
答案 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 的人都将知道这一点。)