【问题标题】:'git log' does not match up with 'git log tag..'“git log”与“git log tag..”不匹配
【发布时间】:2018-08-08 21:13:59
【问题描述】:

我一直认为 '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 是否以真正的时间顺序显示事物,还是不像看起来那么简单?除了我对它所做的简单解释之外,“标签..”选项是否在做其他事情?这些示例与我想的不匹配的一些原因是什么?

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

【问题讨论】:

  • Git 历史不是线性的。不幸的是,git log 默认构成一个线性历史。添加--graph 看看提交是如何连接的,即“真实日志”。
  • 除了 Schwern 提到的(这是真的)之外,git log 还有另一个问题:它有意隐藏了提交。例如,参见第 5 章的“查看”和“查看提交”部分(从第 87 页开始)here

标签: git git-commit git-log


【解决方案1】:

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 在它前面看不到o-n,但在另一个分支中也看不到i-dmyTagHEAD 的历史在 b 一起回归。所以git log myTag..HEAD 给你o-n-i-d

【讨论】:

  • 谢谢。我仔细检查了--graph,你是对的。就日志显示的内容而言,我使用变基而不是合并是否重要?
  • @JCollier 是的,非常如此。 git merge foo 合并两个分支,如上。 git rebase foofoo 之上“移动”你的提交(实际上它写入了新的提交)。这就像假装你的提交一直写在foo 之上。一般情况下,rebase 会在您完成后使用其父分支 merge 更新分支。见stackoverflow.com/questions/40641146/…
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2012-08-07
  • 1970-01-01
  • 2020-08-16
相关资源
最近更新 更多