2015-02-17 95 views
29

我想刪除獲得的我可以刪除當前的所有分支嗎?

$ git branch 

輸出中列出但保持當前分支,一步到位所有分支。那可能嗎?如果是這樣,怎麼樣?

+1

[刪除所有本地git分支](http://stackoverflow.com/questions/10610327/delete-all-local-git-branches) – 2015-02-18 00:38:11

+1

可能的重複[如何刪除所有本地git分支但保留大師與一個命令行?](http://stackoverflow.com/questions/25112684/how-to-remove-all-local-git-branches-but-keep-master-with-one-command-line) – random 2015-02-18 01:41:15

+0

可能[如何刪除所有已合併的git分支?](https://stackoverflow.com/questions/6127328/how-can-i-delete-all-git-branches-which-have-been-merged ) – 2017-08-01 09:11:43

回答

18

基於@pankijs答案,我做了兩個混帳別名:

[alias] 
    # Delete all local branches but master and the current one, only if they are fully merged with master. 
    br-delete-useless = "!f(){\ 
     git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\ 
    }; f" 
    # Delete all local branches but master and the current one. 
    br-delete-useless-force = "!f(){\ 
     git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\ 
    }; f" 

~/.gitconfig


而添加,作爲@torek指出:

請注意,小寫字母-d不會刪除「未完全合併」的麩皮ch(請參閱文檔)。使用-D將刪除這些分支,即使這會導致提交變爲「丟失」; 使用這個非常謹慎,因爲這也刪除分支reflogs,以便通常的「從意外刪除」東西也不起作用。

基本上,從來沒有使用-force版本,如果你不是300%肯定你不會失去任何重要的東西。因爲它永遠丟失

+1

提交到一個被刪除的分支應該仍然在reflog中一段時間​​ – CaptRespect 2017-11-16 18:53:20

+0

確實,提交會停留在reflog中,但不是分支本身,但是我想你可能會發現你的提交,但回到分支狀態?我懷疑是這樣的。Cherry-pick可以用來檢索已刪除分支中的提交,但是你將無法恢復分支本身。 – Vadorequest 2018-02-19 23:28:44

57
$ git branch | grep -v "master" | xargs git branch -D 

將刪除所有分支,除了主,你要保持分支更換主(將刪除主)

+13

如果你想保持*當前*分支使用'grep -v^*'。 – Schwern 2015-02-17 22:27:22

+2

很多消息都向我展示了這個腳本,但是當我運行它時總是告訴我沒有找到分支:( – tucq88 2017-03-31 08:09:17

+0

這不是準確的,它不會刪除一個叫做'master-copy'的分支,例如 – mvallebr 2017-05-05 16:27:31

10

git branch -d(或-D)允許多個分支名稱,但它是一個有點棘手自動提供「除了我現在正在使用的所有分支機構之外,所有地方分支機構「都沒有寫入至少一點代碼。

「最佳」(正式名稱是正確的)方法是使用git for-each-ref得到分支名稱:

git for-each-ref --format '%(refname:short)' refs/heads 

但隨後弄清楚你是在哪個分支更難(git symbolic-ref HEAD是「正式正確的「方法,如果你想寫一個奇特的腳本)。

更方便的是,您可以使用git branch,它打印您的本地分支名稱前面有兩個空格或(對於當前分支)以星號*打印。所以,通過一些運行此刪除*版本,留給你的空間分隔的分支名稱,然後你就可以傳遞給git branch -d

git branch -d $(git branch | grep -v '^*') 

或:

git branch | grep -v '^*' | xargs git branch -d 

注意小寫-d不會刪除「非完全合併」分支(請參閱文檔)。使用-D將刪除這些分支,即使這會導致提交變爲「丟失」;請謹慎使用它,因爲這也會刪除分支reflog,以便通常的「從意外刪除中恢復」的東西也不起作用。

4

要刪除所有分支合併(除了當前-v ‘*’):

git branch --merged | grep -v '*' | xargs git branch -D 

我也回購完成清理做了這樣的命令:

alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f" 

here拍攝。

相關問題