分支是什么时候从大师那里分出来的?

时间:2019-01-22 14:48:27

标签: git fork branch

几天前,我从终端的master分支了当前分支。从那以后,进行了几次提交,但是当我键入git log时,我会看到先前的提交,我在当前分支上进行的提交以及其他人在master上进行的提交。只能假设,在其他人的提交和我的提交之间的某个地方,我将(在master分支上)键入

git checkout -b newbranch

有git命令可以告诉您从master分支newbranch时的确切时间戳吗?

2 个答案:

答案 0 :(得分:2)

不是。那不是git跟踪的东西。实际上,它甚至都没有跟踪newbranch是“从master分支的事实。 (顺便说一句,我建议不要使用“ fork”来指代分支之间的关系,因为“ fork”在git repos和OSS项目中通常具有特定含义。)

正如RomainValeri所建议的那样,在特定情况下,您也许可以查看与分支相关联的元数据的文件系统时间戳。但是这些并不能保证有任何意义。有时,他们提到的文件将不存在,或者将在与分支创建无关的时间创建。即使确实存在并且确实反映了正确的时间戳,它的意义也不大。因为“创建分支”仅意味着创建了一个新的引用。这并不意味着已经(或曾经)被检出,或者说任何引用将包含新提交。

可视化现在情况的最简单方法是获取一个提交图,该图显示分支和其他引用的位置。您可以使用类似git log --graph --all --full-history的名称。 (--full-history选项可能是不必要的,但由于要点是我们不确定所发生的情况,因此可以提供最真实的信息。)或者您可能会发现GUI使其更易于阅读;当我需要查看“大图”时,经常使用gitk --all --full-history

请记住,默认情况下肯定会显示创建分支之前的提交。也就是说,如果您有

A -- B -- C <--(master)
      \
       D <--(newbranch)

然后默认情况下D的日志包括ABD,因为这是该代码在{{1 }}。如果您看到的是newbranch,则表明您根本不在C上(在这种情况下,上图并不是您真正拥有的)

其余的可能是切线,但以防万一...

默认情况下包含newbranchA的原因是,同样,git不知道/不在乎哪个分支是从哪个其他分支创建的,或者类似的东西。在上图中,B可能是原始分支,newbranch可能已经从master分支了;到git,这与Bnewbranchmaster的分支相同。或者可以在分离的HEAD状态下创建B,并且可以在事实保留D之后创建newbranch。否则可能会发生很多其他事情。

如果您想查看在D上添加的 just 提交,则可以说类似newbranch(告诉日志以排除{{ 1}}的历史。

答案 1 :(得分:1)

当创建新分支newbranch时,git在.git/refs/heads/newbranch处写入文件(包含其指向的提交的SHA-1)。也许检查其创建时间戳?

(当然,这仅是分支起源的本地存储库的解决方案,而不是来自另一个存储库的解决方案。)