代码之家  ›  专栏  ›  技术社区  ›  JCollier

“git log”与“git log tag..”不匹配

  •  3
  • JCollier  · 技术社区  · 6 年前

    我一直认为“git日志”是所有真相的来源,真实地按时间顺序显示事情。但我遇到了与git log range选项相矛盾的问题。我相信“标签…”该选项将提供我所在的特定分支上的标签和头部之间的所有内容。

    例如,我使用 git log --oneline --decorate 并获得

    df43779 (HEAD -> myBranch) commit o
    5aeb672 commit n
    34cc390 (tag: myTag) commit k
    060e7ee commit i
    7b6607a commit f
    08a3fea commit d
    467aea3 commit b
    aa4c5dd commit a
    

    当我这样做的时候 git log myTag.. --oneline --decorate 我会得到

    af43779 (HEAD -> myBranch) commit o
    5aeb672 commit n
    

    然而,当我跑步时 git日志myTag--单线——装饰 我得到的是:

    df43779 (HEAD -> myBranch) commit o
    5aeb672 commit n
    060e7ee commit i
    08a3fea commit d
    

    假设 git log 说实话,range命令可能会给我指定提交范围之外的提交的原因是什么?

    我知道更多的信息可能有助于具体回答这个问题,例如提交时间和关于分支复杂性的信息。但我想我真正想知道的是更多的理论:git日志是以真正的时间顺序显示事情,还是不像看起来那么简单?是“标签…”除了我对它所做的简单解释之外,还有其他选择吗?这些例子与我所想的不匹配的原因是什么?

    换句话说,什么日志是“真正的日志”,为什么?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Schwern    6 年前

    git log myTag.. 真的是 git log myTag..HEAD . 它要求从 HEAD 不包括 那些可以从 myTag . 这回答了“从那以后我做了什么?” myTag公司 ?“请参见 gitrevisions “虚线范围符号”。

    o n 很明显,他们在追求 myTag公司 . 但为什么 i d 似乎是以前 myTag公司 ? 很难从你的 git log . git日志 显示历史的线性视图,但Git历史不是线性的。分支是真实的,提交可以通过多种方式连接。

    默认情况下, git日志 在中显示历史记录 新的放前面 同时还要确保父母和孩子的顺序正确。你得跑了 git log --graph 查看真正的连接。养成使用它或Git日志可视化工具的习惯,如 tig .

    这是一种可能发生的方式。。。

            o HEAD
            |
            n
            |\
      myTag k |
            | i
            f |
            | d
            |/
            b
            |
            a
    

    反向日期顺序仍为 o-n-k-i-f-d-b-a ,但现在我们看到在 b 并于合并 n . myTag公司 看不见 o-n 在它前面,但它也看不见 i-d 在另一个分支中。 myTag公司 头部 的历史在 b . 所以 git日志myTag。。头部 给你 o-n-i-d .