该分支的历史是它被合并到的分支的一部分。如果您从合并到的分支中运行git log,您将在合并后的分支中看到提交。它们是历史的一部分。
那你为什么还在“看到树枝”呢?因为你看到的是一系列的祖先-后代关系,而不是分支。
git 中的“分支”不是一系列提交。我们这样对待它,因为它对我们的心智模型有意义,但分支只是一个可移动的标签。它是分配给特定提交的名称。当您在分支 X 上工作并创建新提交时,git 创建该提交,将其父级设置为 X 指向的当前提交,然后移动分支 X 以指向新提交。
所以,假设您在分支 master 中。分支主控当前指向提交 1(我将使用数字来指代提交;git 使用哈希,但没有区别)。你做了一些改变,运行git commit。这意味着 git 创建了一个新的提交,提交 2。提交 2 的父级是提交 1。然后将标记 master 移动到提交 2。所以如果你打开你的 git GUI 工具,你会看到 master 在提交 2,然后在其下方提交 1 行。那是因为 1 是 2 的父提交。
所以现在假设您创建了一个新分支。你运行git branch new; git checkout new。现在你站在新的分支中。新分支是从您站立时创建的,因此它也指向提交 2。在您的 GUI 工具中,您会看到 master 和 new 都指向提交 2。
现在进行一些更改,运行git commit。这将创建提交 3,其中提交 2 作为其父提交,并将分支标签新移动到 3。分支标签 master 仍然指向 2。
现在回到主控,git checkout master,然后进行一些更改,git commit。同样,新的提交(比如说 4),这个也有 2 作为它的父级。在 GUI 工具中,您可以看到 3 和 4 都有一条线将它们连接到 2。
现在,与您的问题相关的部分。仍在 master 中,运行 git merge new。这将合并到新的分支中。那么什么是git中的合并?合并只是一个提交,它没有一个父提交,而是有两个父提交。当您运行 git merge new 时,git 所做的是创建一个新的提交 5,并将 提交 3 和 4 设置为其父级(4 因为它是一个 master 指向,3 因为它是一个新点至)。因此,如果您打开您的 GUI 工具,您将看到您在这种情况下所期望看到的内容:master 指向 5,从中 两 行,1 到 4,1 到 3,因为两个 提交都是 5 的父母。由于您没有告诉 git 其他情况,您仍然会看到新的分支标记提交 3。
现在,你创建的所有这些 git 历史完全独立于分支,如果你删除分支,它仍然存在。请记住,分支只是附加到提交的标签。删除分支不会删除提交或其任何历史记录,它只会删除标记。所以现在你可以运行git branch -d new,新分支就会消失。但是,“在新分支中”的提交 3 仍然存在。提交 3 的父级仍然是 2,提交 3 仍然是 5 的父级之一。那么,如果您查看 GUI 工具会发生什么?好吧,你会看到提交 5 被标记为 master,然后出现两行,将提交 4 和 3 标记为其父级,然后来自 4 和 3 的行将 2 标记为它们的父级,然后是从 2 到 1 的行。所以与删除新分支之前完全相同。
我希望这能说明问题。