1

我正在尝试使用不以[core]. 这些是我失败的尝试:

  1. 简单的方法

    git rev-list --grep '^(?!(\[core\]).).+' "branch1...branch2"
    
    • 空结果
  2. 启用扩展标志

    git rev-list -E --grep '^(?!(\[core\]).).+' "branch1...branch2"
    
    • 错误信息fatal: command line, '^(?!(\[core\]).).+': Invalid preceding regular expression

    • git grep 似乎不支持负前瞻。

  3. 将所有提交的列表与带有标签的提交列表进行比较(参见此答案):

    git rev-list "branch1...branch2" | grep -Fxv <(git rev-list -E --grep '^\[core\].+' "branch1...branch2")
    
    • 结果是sh: syntax error near unexpected token `('

PS:我无法升级到 Git 2.x,所以--invert-grep不是一个选项

4

2 回答 2

1

这样的事情可能会奏效。

git rev-list "branch1...branch2" --not $(git rev-list --grep '^\[core\]')

在该列表中选择与您不想要的模式匹配的修订,然后--not在另一个调用中用于否定该修订列表rev-list

您还可以通过使用如下实际文件来避免在第三次尝试中进行进程替换:

git rev-list -E --grep '^\[core\].+' "branch1...branch2" > core.list
git rev-list "branch1...branch2" | grep -Fxvf core.list
于 2015-06-12T11:25:25.447 回答
1

如果它符合您使用批处理文件的要求,这是一种解决方案:

#!/bin/sh
range="branch1...branch2"
validCommits=`git rev-list -E --grep '^\[core\]' "$range"`
badCommits=`git rev-list "$range" | grep -Fxv "$validCommits"`
于 2015-06-14T12:49:05.240 回答