首页 > 解决方案 > git log:列出两个给定提交“之间”的提交

问题描述

考虑以下 git 历史记录(认为是C从一次合并的功能分支master):Xmaster

    X
    |
    M
   /|
C E D
|/ /
B /
|/
A

什么git log范围的修订将为我提供所有可访问的提交X并包括 的更改B,即B E M X

注意:git log B..X将包括D我不想要的。

标签: git

解决方案


如果排除的原因D是它不是 的后代B1考虑使用--ancestry-path

git log --ancestry-path B..X    # or git rev-list with the same arguments

然而,这确实排除B在修订行走中。包含B自身有点棘手:您可以选择--boundary,但有时包含太多提交。另一种方法是使用B^@排除所有父母B而不排除B自身。无论B是常规提交还是合并,这都有效,否则--ancestry-path操作不会受到干扰。如果B是根提交,它甚至可以工作,但在这种情况下,我不确定这--ancestry-path是否有用。

(如果 B 是一个普通的单亲提交,git log --ancestry-path B^..X那么就可以做到这一点并且比 . 更容易思考B^@。)


1这就是我对关于您为什么打算排除的原始问题发表评论的原因D


推荐阅读