2011-11-22 80 views
26

在工作中,我們正在使用主題分支,這些主題分支在某個時間點被集成到幾個(3)主分支中。 現在我想從我的遠程存儲庫中刪除已完全集成到主分支中的所有主題分支。如果這是不可能的,檢索已整合的本地分行清單也可以。如何刪除已經集成的所有遠程git分支?

回答

35

編輯:

從skalee的評論

最佳答案:

git branch -a --merged remotes/origin/master | grep -v master | grep "remotes/origin/" | cut -d "/" -f 3- | xargs -n 1 git push --delete origin 

老答案:

git push --delete remote topicbranch 

git push remote :topicbranch 

給予新的分支,將一些與git branch --merged master

+1

謝謝,'git branch --merged'看起來不錯。不幸的是,它不能在整合過程中重新分配的分支機構正常工作..但是,至少*我的shitload(160)分支機構被列爲超級安全刪除。 – ThiefMaster

+0

重新構建的分支是棘手的......這可能是可能的,但它至少需要在分支點之後拉取修訂列表,然後沿着主分支尋找修補程序簽名的shellscript ...我沒有意識到這個預煮解決方案。 –

+0

這是太棒了,雖然我確實碰到了小障礙。我用'/'命名我的分支,例如我的一個分支名稱可能是'sf/correct-typo-7'。由於** cut **上的'-f 3'參數,此分支名稱將被截斷爲'sf'。將參數改爲'-f 3-',可以解決這個問題,並用任意數量的斜線處理分支。 –

14

您可以

git branch --merged master | grep -v master | xargs -n 1 git push --delete origin 

自卸這樣做是一氣呵成,在一個腳本調用「乾淨」的,如果你發現你這樣做經常。

+12

如果你想刪除所有的遠程分支,不僅有那些有本地對應的分支:'git branch -a --merged remotes/origin/master | grep -v master | grep「remotes/origin /」| cut -d「/」-f 3 | xargs -n 1 git push --delete origin'。另外,我建議使用'remotes/origin/master'代替普通的'master'來排除你在本地合併但尚未推送的東西,以防最終忘記或決定不推送。 – skalee

+2

@skalee謝謝!除了當分支在文件夾中時,這對我有效 - 改用'cut -d「/」-f 3-'。我還必須添加一個'grep -v develop'來停止它試圖刪除我的開發分支。 – antonyh

+0

'xargs -n 1'太慢了,如果你有很多分支使用'xargs -n 20'代替。 – mozillazg

9

如果您想從原點庫中刪除遠程分支:

git branch -r --merged develop | egrep -iv '(master|develop)' | sed 's/origin\///g' | xargs -n 1 git push --delete origin 
+0

這也有助於消除叉後的所有上游分支 – ianstarz

+0

這是真正正確的答案:),因爲其他人似乎無法刪除包括斜槓,我們使用(混合雖然)功能/我的功能, bugfix/my-feature –

+0

這看起來相當不錯,除了使用origin/master或origin/develop作爲可以刪除某些東西的標準之外,這一點非常重要。僅僅因爲將它合併到本地版本的主分支中而從遠程刪除某些東西是不行的,那麼您可能忘記將該分支推送到遠程,這可能意味着從源刪除未分支的分支。 –

1

這些都是我使用刪除一切融入origin/master的命令。基本上,我從GitHub中刪除了合併到master的所有分支。

git remote update -p && 
git branch -r --merged origin/master | 
grep origin | 
grep -v master | 
cut -d"/" -f2- | 
xargs git push origin --delete 
0

只適用於Powershell和Windows用戶。

git branch -r --merged | findstr /v "origin/master" | %{git push origin --delete $_.Trim().Substring(7)} 
相關問題