git 如何维护已删除分支的提交?
How git maintains commits from deleted branch?
这是git merge
场景。当我合并时,New merge commit
被创建,所以如果我从 New merge commit
返回,我可以看到所有 Master
和 Feature
分支提交的计划历史记录,直到 Common base
.这是我不明白的场景:如果我删除 Feature
分支,我认为功能分支提交将被删除,但实际情况是当我站在 New merge commit
上时,删除 [=15] 之后=] 分支,当我键入 git log
时,我仍然可以看到 Feature
分支提交。这怎么可能?我是不是记错了什么?
正如评论所说,分支只是一个笔记,一个书签。
如果您在 .git
目录(出于教育目的,我建议您这样做)中挖掘一点,您将看到一个 refs/heads
目录。它将包含您本地的每个分支一个文件(远程分支存储在 refs/remotes
)。
如果您打开其中一个文件,您会看到它包含一行:分支指向的最后一次提交的哈希值。
删除分支实际上只是删除 refs/heads
中的匹配文件。这就是为什么删除分支不会影响提交 "of the branch"(提交并不真正属于分支)。
因此,您也可以(同样,仅出于教育目的,我当然不建议在日常工作流程中这样做)通过创建文件 [=15] 创建分支 foo
=] 内容是您希望分支指向的提交的 完整 哈希值。
作为第二个结果,一旦分支被合并,就没有理由保留它 "in case"。
这是git merge
场景。当我合并时,New merge commit
被创建,所以如果我从 New merge commit
返回,我可以看到所有 Master
和 Feature
分支提交的计划历史记录,直到 Common base
.这是我不明白的场景:如果我删除 Feature
分支,我认为功能分支提交将被删除,但实际情况是当我站在 New merge commit
上时,删除 [=15] 之后=] 分支,当我键入 git log
时,我仍然可以看到 Feature
分支提交。这怎么可能?我是不是记错了什么?
正如评论所说,分支只是一个笔记,一个书签。
如果您在 .git
目录(出于教育目的,我建议您这样做)中挖掘一点,您将看到一个 refs/heads
目录。它将包含您本地的每个分支一个文件(远程分支存储在 refs/remotes
)。
如果您打开其中一个文件,您会看到它包含一行:分支指向的最后一次提交的哈希值。
删除分支实际上只是删除 refs/heads
中的匹配文件。这就是为什么删除分支不会影响提交 "of the branch"(提交并不真正属于分支)。
因此,您也可以(同样,仅出于教育目的,我当然不建议在日常工作流程中这样做)通过创建文件 [=15] 创建分支 foo
=] 内容是您希望分支指向的提交的 完整 哈希值。
作为第二个结果,一旦分支被合并,就没有理由保留它 "in case"。