6

我的“远程”服务器上有很多 GIT 分支。

  1. 如何删除超过 1 年的所有分支(不仅仅是合并)?
  2. 我怎样才能删除所有超过 5 个月的合并分支(多个来源“master/develop”)?

这个答案非常好,但它并没有让我一直到那里。 如何删除所有已合并的 Git 分支?

您能否在合并中包含主/开发分支?如何在此添加时间间隔?

git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
4

1 回答 1

6

您可以使用 shell 脚本来删除不超过一年的合并分支,并删除超过五个月的合并分支。

删除超过一年的未合并分支

    #!/bin/bash
    
    tarBranch=$(git branch -r --no-merged | grep -v master | grep -v developer | sed 's/origin\///')
    for branch in $tarBranch
    do
     echo $branch
     lastDate=$(git show -s --format=%ci origin/$branch)
     convertDate=$(echo $lastDate | cut -d' ' -f 1)
     Todate=$(date -d "$convertDate" +'%s')
     current=$(date +'%s')
     day=$(( ( $current - $Todate )/60/60/24 ))
     echo "last commit on $branch branch was $day days ago"
     if [ "$day" -gt 365 ]; then
        git push origin :$branch
        echo "delete the old branch $branch"
     fi
    done

删除超过五个月的合并分支

    #!/bin/bash
    
    git checkout master
    #deleted merged branches on master branch
    tarBranch=$(git branch -r --merged | grep -v master | grep -v develop | sed 's/origin\///')
    for branch in $tarBranch
    do
     echo $branch
     lastDate=$(git show -s --format=%ci origin/$branch)
     convertDate=$(echo $lastDate | cut -d' ' -f 1)
     Todate=$(date -d "$convertDate" +'%s')
     current=$(date +'%s')
     day=$(( ( $current - $Todate )/60/60/24 ))
     echo "last commit on $branch branch was $day days ago"
     if [ "$day" -gt 150 ]; then
        git push origin :$branch
        echo "delete the old branch $branch"
     fi
    done

    git checkout develop
    #deleted merged branches on developer branch
    tarBranch=$(git branch -r --merged | grep -v master | grep -v develop | sed 's/origin\///')
    for branch in $tarBranch
    do
     echo $branch
     lastDate=$(git show -s --format=%ci origin/$branch)
     convertDate=$(echo $lastDate | cut -d' ' -f 1)
     Todate=$(date -d "$convertDate" +'%s')
     current=$(date +'%s')
     day=$(( ( $current - $Todate )/60/60/24 ))
     echo "last commit on $branch branch was $day days ago"
     if [ "$day" -gt 150 ]; then
        git push origin :$branch
        echo "delete the old branch $branch"
     fi
    done
于 2017-10-25T03:08:32.987 回答