2016-04-22 8 views
0

この質問はすでに同様の静脈でブロッキングされています。しかし、私はより厳格な適格基準を探しています。私だけGit:削除対象のすべてのリモートブランチを検索*(最後のコミットはマスターへのマージです)

  1. を習得するためにマージされた枝に興味がある可能性(これは、いくつかは、さらに持っている枝を削除避けるためです

を習得するために、マージ 後にそれ以上のコミットをしていません(可能性のある省略、放棄要求など)

答えて

1

を歓迎する:まだ作業が必要になる場合がありますもののため

git branch -r --merged master 

(もちろん--no-mergedのをそれらについては、other answerのコメントに従って)。

1

ここに提案された解決策があります:

仮定:最も古い祖先はorigin/masterとみなされます。これは標準的な習慣ですが、それを呼び出すことには害はありません。ステップ

  1. によって

    git branch -r --list --contains `git rev-list --max-parents=0 origin/master`| grep -v origin\/master | sed 's/^..\(.*\)/\1/' | xargs -I {} sh -c "echo -n {}' : '; git log --graph -n 1 {} | grep -c '^|[\]\ \ Merge'" 
    

    ステップは、最初のマスターを持っているすべてのリモートブランチが 子孫としてコミットして下さい。

  2. 各ブランチに対して、最新のコミットが最も古い祖先にマージすることを確認します。

出力レポートは次のようになります。ブランチと一緒に1が、

origin/0.2016.02-release : 1 
origin/0.2016.03-release : 1 
origin/Fix-for-NPE-schedule-master : 0 
origin/Fix-possible-infinite-loop-master : 0 
origin/Fixing-unit-tests-master : 0 
origin/NoBodyRequiredForActivity-master : 0 
origin/Removing-not-needed-dependency-master : 0 
origin/updateDevServiceConfig-master : 0 
origin/updateServerPort-master : 0 
origin/updatedPom : 1 

を削除する資格があることを意味し、これは類似した何かを探して誰にもお役に立てば幸いです。 、この特定のケースのために(リモート追跡ブランチは完全にmasterにマージされているものをチェック)はるかに簡単任意の提案や改善点

+0

ルートコミット( '--max-parents = 0')は心配する必要はありません。すべてのマージでは、マージされたすべてのコミットがそのパスから到達可能になり、すべての先行オブジェクトは定義によって後続のものから到達可能です。 'git branch'の' --merged'述部(これは 'git for-each-ref'でも利用可能です)がこれを処理します。' git branch -r --merged master'はあなたのリストを取得します。 – torek

+0

しかし、 'git branch -r --merged master'は、最新のマージ後にさらにコミットしたブランチとそうでないブランチを区別しません。それが私が興味を持っている問題です。 – diarmuid

+1

いいえ、それは真実ではありません: '--merged'は' '$ ours'のtipコミットに対する' '$ theirs'のtipコミットを' '$ ours''と' '$ theirs''の明白な意味でテストし、 ''祖先である 'というテスト( 'git merge-base --is-ancestor'と同じテスト)。例えば' origin/good'が 'X'と' origin/bad'をコミットするとします'X'が' master'の先端の後ろにあるか 'master'の先端ですが' Y'は 'master'の先端から到達できません'祖先のテストは 'X'(' X'は 'master'の先祖の祖先ですが)は' Y'のために失敗します。 – torek

関連する問題