今天准備找以前的一個分支,發現自己本地的分支已經很多了,決定清除一下,然后這里記錄一下批量刪除分支的命令,免得后面又忘。
說批量之前先說單個的。
刪除本地的單個分支:
git branch -d [分支名]
刪除遠程的單個分支:
git push origin :[分支名]
或者
git push origin -d [分支名]
批量刪除本地分支
git branch -a | grep 'lyn_' | xargs git branch -D
解釋一下:git branch -a(--all)表示列出本地所有分支,grep ‘lyn_’表示正則匹配本地所有分支中分支名有'lyn_'扥分支,然后將以上匹配結果作為參數傳給git branch -D,執行刪除本地分支命令,‘|’相當於一個管道符,將上一段的結果傳給下一段
有時候分支命名上沒什么規則,只想保留某幾個正在開發中的分支,刪除所有其他的分支,就可以用下面命令:
git branch -a | grep -v -E 'A|B' | xargs git branch -D
上述命令表示刪除除了A和B分支外的所有本地分支
批量刪除遠程分支
git branch -r| grep 'lyn_' | sed 's/origin\///g' | xargs -I {} git push origin :{}
git branch -r表示列出所有遠程分支,匹配含有lyn_的分支,sed 's/origin\///g'能夠把接受到的分支都過濾掉開頭的origin/得到實際的分支名 (大概這個意思),比如origin/A分支執行了 sed 's/origin\///g'命令就能得到A ,然后將A這個分支作為參數傳給下一個命令,-I {} 使用占位符 來構造 后面的命令,也就是接收到了上個命令的執行結果A執行git push origin :A
順便補充一下本地分支與遠程分支的關聯與取消:
1.取消本地目錄下關聯的遠程庫
git remote remove origin
2.將本地目錄與遠程關聯
git remote add origin git@github.com:git_username/repository_name.git
如果將本地目錄與遠程關聯后,遠程目錄包含本地目錄沒有的內容的時候,git pull會出現如下報錯:
fatal: refusing to merge unrelated histories
可以用以下命令來忽略(要解決沖突)
git pull origin master --allow-unrelated-histories