为什么要在所有父引用中更改分离头状态的新分支?

Why changes a new branch in detached head state all the parent refs?

如果我比较 git/refs 从分支的最后一次提交创建新分支与从分离的头部状态创建时,git/refs 显示不同的行为(名称),我想了解为什么。

假设 head 在 master 上。

我需要一个新的开发分支。之后,我对新分支做了一些提交,并在 master 上做了一些修复。

现在我看到了另一种解决 dev 分支的方法,我创建了第二个新分支并在该分支上进行了一些提交,并在 master 上再次进行了一些修复。

但现在裁判看起来不一样了!只要我不合并加删除或只删除第二个分支仍然是在第二个分支之后调用的前两个引用。

为什么这是一个好行为,因为我无法轻易看出第一个 refs 通常属于 master?只有散列和父散列有助于识别,但这是一种缓慢的方法。谢谢。

编辑:此处显示的信息来自 git log 命令。

与您可能熟悉的其他版本控制系统不同,提交不属于任何分支。相反,分支只是指向提交的标签。对于“提交属于哪个分支”或“提交写入哪个分支”的问题没有明确的答案。相反,您只能说出分支可以访问哪些提交。而这正是 %S 所做的。它的工作原理就像 --source.

   --source
       Print out the ref name given on the command line by which each commit was
       reached.

在您的实例中,前两个提交 052b272 和 adbf0ae 可以通过多个分支到达。在你的第一个例子中,由主人。在你的第二个由主人和 B-1。在你的第三个中,主人,B-1 和 B-2。

git log --all 通过从每个引用开始遍历提交图来工作。如果它可以通过多个 ref 到达提交,它会选择它在打印日志行时恰好从哪个 ref 开始。你的第二个日志可以很容易地说它们来自 B-1 或 master。如果您再次提交,它可能会改变。

如果你 运行 git log 没有 --all,它会为所有提交说 HEAD 因为没有 --all 它只能从 [= 向后工作16=],当前提交。