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

标签 git branch git-merge git-commit

enter image description here

这是 git merge 场景。当我 merge 时,创建了 New merge commit,所以如果我从 New merge commit 返回,我可以看到所有 Master 的预定历史记录和 Feature 分支提交到 Common base。这是我不明白的场景:如果我删除 Feature 分支,我认为 Feature 分支提交将被删除,但现实是当我站在 New merge commit,删除Feature分支后,当我输入git log时,我仍然可以看到Feature分支提交。这怎么可能?我是不是误会了什么?

最佳答案

如评论中所述,分支只是一个笔记,一个书签。

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

如果您打开其中一个文件,您会看到它包含一行:分支指向的最后一次提交的哈希值。

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

因此,您还可以(同样,仅出于教育目的,我当然不建议在日常工作流程中这样做)通过创建文件 创建分支 foo >refs/heads/foo 内容是您希望分支指向的提交的完整哈希。

第二个结果是,一旦分支被 merge ,就没有理由“以防万一”。

关于git - git如何维护已删除分支的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55730292/

相关文章:

git - VimDiff E93 : More than one match for RE

git - 当两个分支不同但两个分支中都没有新提交时,为什么 git merge 不更改?

Git 正在推送我已删除的文件

git - 如何配置 emacs.app 以在 *shell* 中使用 git for OSX 上的 git

Git:显示在两个修订版之间更改的所有文件的提交内容

android - 如何在 Eclipse 上的现有 Android 存储库中添加现有分支

intellij-idea - 如何使用 IntelliJ IDEA 检查 CVS 分支 HEAD?

git:如何获取特定文件的最新提交,而不考虑分支?

git - 列出影响文件的 merge 提交

git - 设置 ssh 服务器转发连接