首页 > 解决方案 > git log range 排除多个基本引用的祖先

问题描述

我经常git log <options> BASE..TARGET用来显示一系列提交。

这是做什么的,根据我以前的经验和理解:

有时我想实现以下目标:

一个典型的用例是查找给定功能分支(= 祖先)中的提交,但既不在主分支(= 祖先)中,也不在特定的其他功能分支中。

显然,范围 A..B 语法不会在这里削减它。相反,需要有一个类似 的参数--exclude-ancestors-of=A_0,A_1,A_2,其语法允许多个引用。

这有可能吗?

标签: gitgit-log

解决方案


正如jthill 评论的那样,您可以用以下方式表达这一点:

git log TARGET ^BASE_0 ^BASE_1 ^BASE_2

(这些可以按任何顺序排列)。如果你有很多否定引用——上面的表达式是否定引用——你可以简化一下输入:^BASE_number

git log TARGET --not BASE_0 BASE_1 BASE_2

--not告诉 Git所有后续的说明符都将被否定。 第二个--not否定否定,回到积极的引用,所以你可以——对于这个例子有点毫无意义——写:

git log --not BASE_0 BASE_1 BASE_2 --not TARGET

也是。

在 Git中有很多表达修订和修订范围的方法;请参阅gitrevisions 文档(或git help revisions)以获得相当完整的列表。请注意,两点和三点语法在几个命令中可能具有不同的含义。该git diff命令是这方面最重要的例子。查阅每个特定 Git 命令的手册页,看看它对该命令是否有特殊含义,如果有,含义是什么。


推荐阅读