2011-09-15 108 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 bug)的情況,我將不得不自己重新綁定所有分支。

+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,它只是基於你問題第二段的要求。您可以先嚐試使用echo而不是git branch -D,以確保分支列表看起來像您期望的。我可以在必要時幫助完善它。

+0

完美工作。你可以將它格式化爲包含在.gitconfig中,這樣我可以執行'git gcbr'並且它會清理我的分支? –

+0

@PaulTarjan:對於任何不重要的東西,最好將它放在一個名爲'git-gcbr'的腳本的某個位置,以便稍後可以讀取和編輯它。這也使得更容易做一些事情,比如增加一個幹運行/強制選項,以防你想謹慎行事。 (或者你可以讓它回顯分支名稱,檢查並管道到'xargs git branch -D',我想。) – Cascabel