git 日志范围排除多个基础引用的祖先
git log range exclude ancestors of multiple base refs
我经常使用 git log <options> BASE..TARGET
来显示一系列提交。
这是做什么的,根据我以前的经验和理解:
- 包括 TARGET 及其所有祖先。
- 排除 BASE 及其所有祖先,即使它们是 TARGET 的祖先。
有时我想实现以下目标:
- 包括 TARGET 及其所有祖先。
- 排除 BASE_0 及其所有祖先,即使它们是 TARGET 的祖先。
- 排除 BASE_1 及其所有祖先,即使它们是 TARGET 的祖先。
- 排除 BASE_2 及其所有祖先,即使它们是 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 命令的手册页,看看它是否对该命令有特殊含义,如果有,含义是什么。
我经常使用 git log <options> BASE..TARGET
来显示一系列提交。
这是做什么的,根据我以前的经验和理解:
- 包括 TARGET 及其所有祖先。
- 排除 BASE 及其所有祖先,即使它们是 TARGET 的祖先。
有时我想实现以下目标:
- 包括 TARGET 及其所有祖先。
- 排除 BASE_0 及其所有祖先,即使它们是 TARGET 的祖先。
- 排除 BASE_1 及其所有祖先,即使它们是 TARGET 的祖先。
- 排除 BASE_2 及其所有祖先,即使它们是 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 命令的手册页,看看它是否对该命令有特殊含义,如果有,含义是什么。