gpt4 book ai didi

git - 'git log' 与 'git log tag..' 不匹配

转载 作者:太空狗 更新时间:2023-10-29 14:03:34 35 4
gpt4 key购买 nike

我一直认为“git log”是所有真相的来源,它真实地按时间顺序显示事物。但是我遇到了与 git log range 选项的矛盾。我相信 'tag..' 选项会在我所在的特定分支上为我提供介于 tag 和 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 log myTag.. 实际上是 git log myTag..HEAD。它要求所有可从 HEAD 排除 可从 myTag 访问的提交。这回答了“自 myTag 以来我做了什么?”这个问题。参见 gitrevisions “点范围符号”。

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

默认情况下,git log相反的时间顺序 呈现历史记录,同时确保 parent 和 child 的顺序也是正确的。您必须运行 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 处 merge 。 myTag 看不到它前面的o-n,但它也看不到另一个分支中的i-dmyTagHEAD 的历史在 b 一起返回。所以 git log myTag..HEAD 给你 o-n-i-d

关于git - 'git log' 与 'git log tag..' 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49038908/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com