这是git merge
场景。当我合并时,New merge commit
被创建,所以如果我从New merge commit
回来,我可以看到所有Master
和Feature
分支的预定历史提交到Common base
。这是我不明白的情况:如果我删除Feature
分支,我认为功能分支提交将被删除,但现实是,当我站在New merge commit
,删除Feature
分支后,我仍然可以看到Feature
分支提交时我输入git log
。怎么可能?我错了什么?
在评论中提到,分支只是一个笔记,一个书签。
如果你在.git
目录中挖掘一下(我建议你出于教育目的),你会看到一个refs/heads
目录。它将包含您在本地拥有的每个分支的一个文件(远程分支存储在refs/remotes
中)。
如果您打开其中一个文件,您将看到它包含一行:分支指向的最后一次提交的哈希值。
删除分支实际上只是删除了refs/heads
中的匹配文件。这就是为什么删除分支不会影响“分支”的提交(提交实际上不属于分支)。
因此,您也可以(再次,仅作为教育目的,我不建议在日常工作流程中这样做)通过创建文件foo
创建分支refs/heads/foo
作为内容您想要的提交的完整哈希分支指向。
作为第二个结果,一旦分支合并,就没有理由将其保留在“以防万一”中。