' git log'不符合' git log tag ..'

时间:2018-02-28 21:29:59

标签: git git-commit git-log

我一直认为' git log'是所有真理的源泉,真正按时间顺序展示事物。但是我遇到了与git log range选项的矛盾。我相信'标签..'选项会给我在特定分支上的标签和HEAD之间的所有内容。

例如,我使用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 log myTag.. --oneline --decorate时,我得到了这个:

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

假设git log说实话,为什么我的range命令可能会让我提交超出指定提交范围的提示?

我知道更多信息可能有助于回答这个问题,例如提交时间和分支复杂性信息。但我想我真正想知道的更多是理论上的:git log是按真正的时间顺序显示的,还是不像看起来那么简单?并且是'标签..'除了我对它做了什么的简单解释之外,选择做什么?有什么理由说明为什么这些例子没有像我想象的那样匹配?

换句话说,什么日志是"真实日志"为什么?

1 个答案:

答案 0 :(得分:3)

git log myTag..真的是git log myTag..HEAD。它要求HEAD 可以从myTag到达 的所有提交内容。这回答了问题"自myTag以来我做了什么?"请参阅gitrevisions"虚线范围符号"。

on很明显,他们在myTag之后。但为什么id似乎在myTag之前呢?仅通过git log很难知道。 git log呈现历史的线性视图,但Git历史不是线性的。分支是真实的,提交可以通过多种方式连接。

默认情况下,git log反向时间顺序显示历史记录,同时确保父母和子女的顺序也正确。您必须运行git log --graph才能看到真正的关联。养成使用它的习惯,或像tig这样的Git日志可视化工具。

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

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

反向日期订单仍为o-n-k-i-f-d-b-a,但现在我们看到在b处创建了一个分支,并在n合并。 myTag无法在{1}}之前看到它,但它也无法在另一个分支中看到o-ni-dmyTag的历史记录在HEAD一起回归。因此b会为您提供git log myTag..HEAD