如何将 Git/Mercurial 日志限制为日志至少包含两个字符串之一的提交?

How can I limit the Git/Mercurial log to commits whose logs contain at least one of two strings?

有没有一种方法可以为 git/Mercurial 命令发送两个选项?

我想在 git 存储库和 Mercurial 存储库的历史记录中搜索特定单词,比如 "commit"。但是,我不确定它是如何写在提交消息 "commit" 或 "com-mit" 中的?所以,我想用命令发送这些选项。我知道如果我想搜索我会输入:

在git中:

git log --grep="commit"

在 mercurial 中:

hg log --keyword commit

有什么帮助吗?

使用 Mercurial 执行此操作的最灵活方法是使用 revsets。对于您的示例:

hg log -r 'grep("\b(com-mit|commit)\b")'

在Python正则语法中,\b表示单词边界,反斜杠需要转义。 (a|b) 语法用于匹配一个或另一个。参数周围的单引号在那里 shell 不会解释元字符本身。

您还可以通过将 revsets 与 and:

组合来简化正则表达式
hg log -r 'grep("\bcom-mit\b") or grep("\bcommit\b")'

如果您不需要精确匹配单词(例如,如果您还想匹配 "committer" 和 "committed",而不仅仅是 "commit"),您可以使用关键字 revsets :

hg log -r 'keyword("com-mit") or keyword("commit")'

通过使用 and 而不是 or,您可以找到同时匹配两者而不是其中之一的修订;此外,您可以使用 reverse(...) 以相反的顺序列出匹配项,例如:

hg log -r 'reverse(keyword("com-mit") or keyword("commit"))'