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ます。

次のような実際のファイルを使用して、3 回目の試行でプロセス置換を回避することもできます。

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

バッチ ファイルを使用する要件に適合する場合、これが 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 に答える