一鍵刪除遠程或者本地合併到master的分支

git branch --merged|–no-merged [分支名]

參數解釋

  1. --merged查詢已經合併到當前分支的分支名
  2. --no-merged查詢未合併到當前分支的分支名
  3. 分支名不加,則默認爲當前分支
  4. git branch --merged master查看本地已經合併到master分支
  5. git branch -r --merged origin/master查詢所有已經合併到遠程master分支的遠程分支

grepegrep

  1. Linux grep 命令用於查找文件裏符合條件的字符串

    grep 參數 查詢的字符串 文件或目錄

  2. egrep相當於grep -E代表使用正則查詢文件或目錄

  3. grep -v顯示不包含匹配文本的所有行

  4. egrep -v '(^\*|master)'顯示所有不包含以*開頭和master的

    不包含*,就不會刪除當前分支
    在這裏插入圖片描述

  5. 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/' 是 將所有的 orign/替換

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. 嘗試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

  2. 嘗試二:

    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刪除失效遠程分支

  3. 成功

    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
    
  4. 腳本實現

    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
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章