git log range排除多个基本参考的祖先

问题描述 投票:-1回答:1

我经常使用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 git-log
1个回答
0
投票
作为jthill commented,您可以使用:]

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中表达修订和修订范围;有关合理完整的列表,请参见the gitrevisions documentation(或git help revisions)。注意,尽管在两个命令中,两点和三点语法可能具有不同的含义。 git diff命令是最重要的示例。请查阅每个特定的Git命令的手册页,以查看该命令是否对该命令有特殊含义,如果有,则意味着什么。
© www.soinside.com 2019 - 2024. All rights reserved.