如评论所述,分支只是一个注释、书签。
如果你深入研究 .git
目录(出于教育目的,我建议你这样做),你会看到一个 refs/heads
目录。它将包含每个本地分支的一个文件(远程分支存储在 refs/remotes
中)。
如果你打开其中一个文件,你会发现它包含一行:分支指向的最后一次提交的哈希值。
删除分支实际上只是删除 refs/heads
中对应的文件。这就是为什么删除分支不会影响“分支”的提交内容(提交实际上并不属于某个分支)。
因此,你也可以(同样出于教育目的,当然不建议在日常工作流程中这样做)通过创建文件 refs/heads/foo
并将其内容设置为你想要分支指向的提交的完整哈希值来创建分支 foo
。
第二个结果是,一旦分支合并,就没有理由保留它“以防万一”了。
refs/heads/foo
并不存在,即使分支foo
存在。这是因为Git存储分支名称到哈希ID映射的地方不仅仅是普通文件;它还有一个.git/packed-refs
文件。由于分支名称区分大小写,但Windows和MacOS上的文件名通常不区分大小写,我预计Git将来会放弃在与分支同名的文件中存储哈希ID的想法。无论Git是否转向真正的数据库,或者只是编码分支名称,都取决于谁修复了这个错误。 - torek