如何删除所有超过一年的Git远程分支?

8

我的“远程”服务器上有许多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

{btsdaf} - JDB
3
Git不会存储分支创建日期的信息,你可以寻找最后提交记录为1年前的分支。你可以使用Git for-each-ref命令来实现:https://git-scm.com/docs/git-for-each-ref - frennky
{btsdaf} - Mort
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

你能用GIT Bash格式写这个吗?我在转换时遇到了一些困难。 - SpoiledTechie.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接