0

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

让我们假设头部在主人身上。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

为什么这是一个好的行为,因为我不能轻易看到第一个裁判通常属于大师?只有散列和父散列有助于识别,但方法较慢。谢谢。

编辑:此处显示的信息由git log命令提供。

4

1 回答 1

0

与您可能熟悉的其他版本控制系统不同,提交不属于任何分支。相反,分支只是一个指向提交的标签。对于“提交属于哪个分支”或“哪个分支是写在哪个分支上”的问题没有明确的答案。相反,您只能说分支可以访问哪些提交。这就是%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 或主人。如果你再次提交,它可能会改变。

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

于 2020-07-13T08:04:48.957 回答