首页 > 解决方案 > 什么时候从 master 分出分支?

问题描述

几天前,我从终端中的 master 分叉了当前分支。从那时起,已经做了一些提交,但是当我输入 时git log,我看到了以前的提交,我在当前分支上所做的那些,以及其他人在 master 上所做的那些。只能假设,在其他人的提交和我的提交之间的某个地方,我会(在主分支上)输入

git checkout -b newbranch

是否有一个 git 命令可以告诉您从 master 分叉 newbranch 时的确切时间戳?

标签: gitbranchgit-fork

解决方案


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

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

可视化现在情况的最简单方法是获取显示分支和其他 refs 位置的提交图。你可以使用类似的东西git log --graph --all --full-history。(该--full-history选项可能是不必要的,但由于我们不确定发生了什么,这将给出最真实的画面。)或者您可能会发现 GUI 更易于阅读;gitk --all --full-history当我需要看“大图”时,我经常使用。

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

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

那么默认情况下的日志D包括ABD,因为这是代码的完整历史记录,因为它存在于newbranch。如果您看到C,则表明您确实根本没有打开newbranch(上图不是您在这种情况下真正拥有的)。

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

A默认情况下包含的原因B是因为 git 不知道/不关心哪个分支是从哪个其他分支创建的,或者类似的东西。在上图中,newbranch可能是原始分支,并且master可能是从它分支的Bnewbranch对于 git,这与从masterat分支相同B。或者D可以在分离的 HEAD 状态下创建,并且newbranch可以在保存D. 或者可能会发生很多其他事情。

如果您只想查看添加到提交newbranch,您可以这样说git log master..newbranch(告诉日志排除任何属于master历史的提交)。


推荐阅读