2011-09-15 29 views
2

私の通常のパターンはマスターから分岐し、大量の作業を行い、次にrebaseしてgit svn dcommitとします。どうすれば私の古い枝すべてをきれいにすることができますか?すでにコミットされているgitブランチを削除する

基本的には、メッセージ内にgit-svn-id:の枝があり、それにはgit branch -Dの枝があります。

注:git branch --no-color --no-track --mergedはほとんど私を得ていますが、私がgit fetch -f(狂ったgit-svnバグのため)が必要な状況になった場合は、すべてのブランチに自分自身をリベースする必要があります。

+0

コミットメッセージにすべてのブランチにgit-svn-idがあるとは限りませんか?最新のコミットを参照していますか? – prusswan

+0

ええ、HEADはマージされていれば 'git-svn-id'しか持っていません。 –

+0

大丈夫ですが、バッチファイルを使ってローカルブランチをリストし、その条件をチェックすることが問題だと思います。それはむしろ危険なので私はおそらく別々に削除を行うでしょう – prusswan

答えて

0

ソートのワンライナー:これは未検証であること

git for-each-ref --format='%(refname:short)' refs/heads | 
while read branch; do 
    if git show -s $branch | grep 'git-svn-id:'; then 
     git branch -D $branch 
    fi 
done 

注意。私はgit-svnを使っていません。それはちょうどあなたの質問の第2段落の要件に基づいています。 git branch -Dの代わりにそこにエコーを入れて最初に試してみましょう。ブランチのリストが期待どおりになっているか確認してください。私は必要に応じてそれを洗練することができます。

+0

完全に働いた。 .gitconfigにインクルードするためにフォーマットすることができるので、 'git gcbr'を実行すると、ブランチを整理できますか? –

+0

@PaulTarjan:本当に重要なことは、パスのどこかにある 'git-gcbr'というスクリプトに入れて、実際には後で読むと編集できるようにする方がいいです。それはまた、慎重に歩きたい場合に、ドライラン/フォースオプションを追加するなどの作業を簡単にします。 (あるいは、ブランチ名をエコーし​​、検査し、 'xargs git branch -D'にパイプすることができます。) – Cascabel

関連する問題