【发布时间】: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