如何获取特定分支的Git日志?

6

假设以下的 Git 历史记录:

Branch1     B---C-------F---G
           /     \           \
Master    A-------D---E-------H

执行 git log master 命令,将按以下顺序列出日志记录 A-B-C-D-E-F-G-H。但我只对主分支的历史记录感兴趣(即 A-D-E-H)。

如何“摆脱”Branch1中不需要的日志记录? 我尝试了很多关于git log的选项,但是我找不到合适的选项...


这引出了我在这个上下文中不理解的另一件事情:

通过 git log master 给出的日志历史记录显示了我的主分支的演变(A-B-C-D-E-F-G-H)。

但是通过执行 git checkout HEAD~1 命令(假设主分支=HEAD),它给我返回 E(演变 HEAD~3A-HEAD~2D - HEAD~1E - HEADH -> A-D-E-H

这就是我不理解的:在git log中观察H的祖先是G,而在git checkout中观察H的祖先是E

我不明白这个问题 - H的祖先是G还是E?…


结论:我想要的只是从HEADHEAD~ngit log条目(例如,在 n=1...3的情况下)。 这如何实现? 是否可能?


你说得对 - 我使用了错误的搜索关键词(并且引用的问题标签非常不准确...) - hoppfrosch
@hopprosch:我修复了问题中的标签。 - CharlesB
可能是重复的问题:如何运行Git Log仅查看特定分支的更改? - Steve Chambers
1个回答

8
你要找的是什么。
git log --first-parent

为什么这个选项被称为--first-parent可以回答你的问题。

我不理解这个 - H的祖先是G还是E?

答案是:都是。E是第一个父节点,但G是第二个父节点,因为H是一个合并提交。合并提交是具有多个父节点的提交。


非常感谢 - 这正是我所寻找的!我尝试过 TortoiseGit,它在日志视图中有一个“first-parent”的选项。但是,这并不在所有情况下都能正常工作(如果选中了“显示所有分支”,“first_parent”就没有任何效果...)这让我放弃了“第一父节点”(TortoiseGit 1.7.14.0)。 - hoppfrosch
不完全清楚的是术语:为什么选项被称为“--first-parent”(单数),而它却提供了第一代的完整祖先行? 我认为应该改为“--first-parents”。 - hoppfrosch
对于每个遇到的提交,只选择该特定提交的“第一个父提交”。提交H是合并提交,因此它有两个父提交(G和E),但第一个父提交是E。因此,每次遇到合并提交时,只会跟随第一个父提交,从而完全省略顶部分支。 - Colin D Bennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接