git branch --merged|–no-merged [分支名]
參數解釋
--merged
查詢已經合併到當前分支的分支名--no-merged
查詢未合併到當前分支的分支名- 分支名不加,則默認爲當前分支
git branch --merged master
查看本地已經合併到master分支git branch -r --merged origin/master
查詢所有已經合併到遠程master分支的遠程分支
grep和egrep
-
Linux
grep
命令用於查找文件裏符合條件的字符串grep 參數 查詢的字符串 文件或目錄
-
egrep
相當於grep -E
代表使用正則查詢文件或目錄 -
grep -v
顯示不包含匹配文本的所有行 -
egrep -v '(^\*|master)'
顯示所有不包含以*開頭和master的不包含*,就不會刪除當前分支
-
egrep -v "(^\*|master|HEAD)
顯示所有不包含以*開頭和master以及HEAD的git branch -r會有HEAD表示當前分支指向
Cut
cut
命令用於剪切origin/
- -d :自定義分隔符,默認爲製表符。
- -f :與-d一起使用,指定顯示哪個區域。
cut -d '/' -f num
使用/作爲分隔符,並且展示第二個
tr
Linux tr 命令用於轉換或刪除文件中的字符,但tr在此並不適用。
tr -d 'origin/'
是 將所有的 o
、 r
、 i
、 g
、 n
、 /
替換
sed
sed 's/正則/替換成的字符/g'
sed 's/origin\///g'
將文本中origin/
替換成空字符
xargs
linux xargs
是一個強有力的命令,它能夠捕獲一個命令的輸出,然後傳遞給另外一個命令。
xargs -n num
num表示次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的。
刪除本地倉庫失效的的遠程分支
git remote prune origin
刪除本地已經merged的分支
git branch --merged | egrep -v '(^\*|master)' |xargs git branch -D
注意:刪除之前先確定刪除分支
刪除遠程已經merged的分支
-
嘗試1:
git branch -r --merged origin/master |egrep -v '(master|HEAD)'|cut -b '/' -f 2|xargs -n 3 git push origin --delete
注意:分支名可能包含/,比如分支爲jxw/test。對遠程分支 origin/jxw/test
cut -b '/' -f 2
會得到jxw和test兩個結果。這個時候去刪除jxw分支是不存在的。所以需使用特殊方法規避。優化方案:使用sed代替cut
-
嘗試二:
git branch -r --merged origin/master |egrep -v '(master|HEAD)'|sed 's/origin\///g'|xargs -n 3 git push origin --delete
有些分支刪除報錯,遠程引用不存在。引出問題 git branch -r 查詢的不是最新的。
git remote prune origin
刪除失效遠程分支 -
成功
git remore prune origin|git branch -r --merged origin/babel-prd-6.5 |egrep -v '(master|HEAD)'|grep 'jxw'|sed 's/origin\///g'|xargs -n 3 git push origin --delete
-
腳本實現
Package.json文件
"scripts": { "clear:local": "bash clearBranch.sh local", "clear:remote": "bash clearBranch.sh remote" }
clearBranch.sh文件
#!/bin/bash # 遠程分支必須包含的字符,默認爲jxw inc=$2 include=${inc:='jxw'} case $1 in "local") echo '開始清除本地已經合併到master的分支(不包擴當前分支)' git branch --merged master | egrep -v '(^\*|master)' |xargs git branch -D echo '本地分支刪除執行完畢' ;; "remote") echo '開始清除遠程已經合併到master的分支' git remote prune origin echo 'git remote prune origin 刪除本地遠程失效分支成功' echo "即將刪除以下遠程分支" branch=`git branch -r --merged origin/master |egrep -v '(master|HEAD)'|grep $include|sed 's/origin\///g'` echo $branch echo '輸入y刪除,n或任意字符取消' read $REPLY if [ "$REPLY" == 'Y' -o "$REPLY" == 'y' ];then echo $branch |xargs -n 3 git push origin --delete echo '遠程分支刪除執行完畢' else echo '取消刪除遠程分支' exit 0 fi ;; *) exit 0 ;; esac