1

如果我使用 gitk 查看提交对象,它会在分支下(在左下窗格中)列出该分支的所有子项,我可以向上导航到这些子项(只要它们不是无名提交但实际上具有分支名称)。

为什么?恕我直言,这不合逻辑且无用,因为它违反了事件的年表(thingsg 如何提交到存储库中)。

假设我有一棵看起来像这样的树:

o 分支“左”(提交 3)
| o 分支“右”(提交 2)
|/
o 提交 1
|
o 分支“基地”

现在,如果我选择提交 1,那么在“分支:”下,我将看到:
分支:左,右
跟随:基础

这有什么意义?提交 1 对象是基本分支的一部分,它既不是左分支的一部分,也不是右分支的一部分,仅仅是因为在创建它时,左和右还不存在。因此,稍后合并或提交给左右的所有内容都将成为左右的一部分,而不是提交 1。那么提交 1 的分支如何包括左右?

有人请解释我在这里缺少什么,因为来自 ClearCase 背景,这对我来说根本没有意义......

谢谢!

4

3 回答 3

1

多亏了这些信息,您知道所选提交中引入的更改包含在所有分支中。

我可以想到我想知道提交适用于哪些分支的情况(或者更确切地说,如果给定的分支包含选定的提交)。您总是可以按照 gitk 中的路线进行操作,但是使用长分支可能会很麻烦。

有时我想做相反的事情,选择一个提交并查看另一个先前的提交是否适用于那里。据我所知,没有实际的方法可以做到这一点,因此选择另一个先前的提交并检查“分支”字段是一个不错的替代品。

于 2010-12-14T13:06:39.273 回答
0

Git 有一个更匿名的分支模型(不要与匿名分支混淆,git 没有这些),即提交不会与分支永久关联(有时分支名称会进入合并消息,但这更像是一种约定)。git 中的分支是一个分支标签,它随着新的提交一起向前移动,但提交中没有关于它是在哪个分支上创建的信息。

在您的示例commit1中,与任何分支都没有直接关联,但前一个分支保持打开状态,base并且两个升序提交是 onLeftRight.

于 2010-12-15T09:11:45.623 回答
0

你在看这个有点错误。commit1 提交不是基本分支的一部分。在 git 中,分支是对提交对象的简单引用。然后将分支的历史描述为“所有可访问的提交”。因此,commit1 可以从左侧和右侧访问,但不能从基础访问。

如果您要这样做,git checkout base && git checkout -b feature2那么您的新 feature2 分支将不包括 commit1。Git 不跟踪分支的创建——如果你想记录你可以添加一个标签或使用git mergebase Left Right它将告诉你从两个分支都可以到达的第一个提交(在本例中为 commit1)。

于 2011-12-14T08:19:36.320 回答