2012-05-22 4 views
8

git branch -a --contains <hash>私にはすべてhashを含むブランチがあります。私が望むのはgit branch -a --no-contains <hash>です。残念ながら、そこにこれを実現するためのコマンドではないようですので、私は解決策を考えているようなものです:コミットを含まないブランチを表示

git branch -a | grep -v output of(git branch -a --contains)が、私のbashはタスクまでではありません。

Show all branches that commit A is on and commit B is not on?が適用されるようですが、アプローチは必要以上に複雑に思えます。

上記を達成する最も簡単なアプローチは何ですか?

+0

可視性について:** [Git 2.13](https://github.com/git/git/blob/v2.13.0/Documentation/RelNotes/2.13.0)に '--no-contains'フラグが追加されました。 .txt)** .. [my answer](https://stackoverflow.com/a/44687845/1667513)に記載されています。 – nonsensickle

答えて

11

grepには固定文字列に一致する-Fオプションがあります。あなたがやっていることに役立つだろう。

git branch -a | grep -vF "$(git branch -a --contains <hash>)" 

残念ながら、-Fは、部分一致を持って支店名を除外します。 antakが示唆しているように、より信頼性の高いdiffの代わりにcommを使用できます。

git branch -a | sort | comm -3 - <(git branch -a --contains <hash> | sort) 
+1

+1これはトリックです。シンプルでポイントまで。 – ralphtheninja

+0

はい、間違いなく。ありがとう! – kayaker243

+0

これは、コミットを含むブランチの名前と部分的に一致するブランチを間違って隠すことに注意してください。例えば'echo -e" aaa \ nbbb "| grep -vF "$(echo aa)" ' – antak

2

ブランチ名が部分的に一致する場合、受け入れられた回答は正しく実行されませんので、ここではこの回答を処理します。

git branch -a | comm -3 - <(git branch -a --contains <hash>) 

| sortcomm: file 1 is not in sorted order警告があなたを妨げる場合は両方のコマンドの末尾に付加することができます。しかし、これは、2つの入力の順序が同等であるため、正しい結果を得るためには必要ありません。

関連する問題