git 日志范围排除多个基础引用的祖先

git log range exclude ancestors of multiple base refs

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

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

有时我想实现以下目标:

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

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

这有可能吗?

作为,您可以用以下方式表达:

git log TARGET ^BASE_0 ^BASE_1 ^BASE_2

(这些可以按任何顺序排列)。如果你有很多否定引用——上面的 ^BASE_<em>number</em> 表达式是否定引用——你可以通过以下方式简化输入:

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