26

以前の質問で、誰かが EXACT コミットを含むブランチを見つけるための回答を提供しました:

特定のコミットを含むブランチを一覧表示する方法

受け入れられた回答は、これが正確なコミット ID に対してのみ機能し、同一のコミットに対しては機能しないことを強調しています。さらに、Git Cherry を使用してこれを解決できると述べられています。

Git cherry は逆方向に向けられているようです。アップストリームにプッシュされていないコミットを見つける。これは、どのブランチがそれを作成したのか、何が上流にあるのかわからない場合は役に立ちません。したがって、この問題の解決にどのように役立つかわかりません。

特定のコミットの「同等」を含むすべてのブランチを見つけるために git cherry を使用する方法の例を誰かが説明/提供できますか?

4

4 に答える 4

8

以下は動作するようです (ただし、あまりテストされていません)。git cherry ローカルの git branch ごとに実行git cherryされ、コミットがブランチにないとしてリストされていない場合は、ブランチ名を出力します。

# USAGE: git-cherry-contains <commit> [refs]
# Prints each local branch containing an equivalent commit.
git-cherry-contains() {
    local sha; sha=$(git rev-parse --verify "$1") || return 1
    local refs; refs=${2:-refs/heads/}
    local branch
    while IFS= read -r branch; do
        if ! git cherry "$branch" "$sha" "$sha^" | grep -qE "^\+ $sha"; then
            echo "$branch"
        fi
    done < <(git for-each-ref --format='%(refname:short)' $refs)
}

実際にどのように機能するか ( を使用) についての優れた説明については、Andrew C の投稿を参照してください。git cherrygit patch-id

于 2015-07-01T10:07:57.027 に答える