git如何维护来自已删除分支的提交?

时间:2019-04-17 14:43:12

标签: git branch git-merge git-commit

enter image description here

这是git merge场景。合并时,将创建New merge commit,因此,如果我从New merge commit返回,则可以看到所有MasterFeature分支提交的计划历史记录,直到{{1} }。这是我不了解的情况:如果删除Common base分支,我认为Feature分支的提交将被删除,但是现实是当我站在Feature时,删除{{1 }}分支,当我输入New merge commit时,仍然可以看到Feature分支的提交。那怎么可能?我有误会吗?

1 个答案:

答案 0 :(得分:3)

评论中提到的一个分支只是一个注释,一个书签。

如果您在.git目录中进行挖掘(出于教育目的,我建议您这样做),则会看到一个refs/heads目录。每个分支在本地将包含一个文件(远程分支存储在refs/remotes中)。

如果打开这些文件之一,您将看到其中包含一行:分支指向的最后一次提交的哈希。

删除分支实际上只是删除refs/heads中的匹配文件。这就是为什么删除分支不会影响“分支”的提交(提交实际上并不属于分支)的原因。

因此,您还可以(再次,仅出于教育目的,我当然不建议您在日常工作流程中这样做)通过创建文件foo创建分支refs/heads/foo包含要分支指向的提交的 full 哈希。

第二个结果是,分支合并后,就没有理由将其保留在“万一”的情况下。