首页 > 解决方案 > 重命名所有旧分支脚本

问题描述

如何重命名最后一次提交早于 2019 年 12 月 31 日的所有分支,在远程存储库的实际名称之前添加“OLD_”

标签: gitbranchrename

解决方案


这是一个执行您想要的操作的脚本(+ 示例)。

这是我在 2018 年最后一次更新的一些随机分支的列表,我们将在这些分支上运行脚本。该脚本要求您拥有每个分支的本地副本,但我将在最后展示如何将脚本修改为完全自动化(我不太愿意将最终出现在远程的东西自动化)。

    zrrbite@ZRRBITE MINGW64 /d/dev/git/jspaint (master)
    $ git for-each-ref --sort='-committerdate' --format='%(refname)%09%(committerdate)' 
    refs/heads | sed -e 's-refs/heads/--'

    master          Mon Aug 31 13:54:23 2020 +0200
    newnewbr        Tue Aug 28 00:08:31 2018 +0200
    newbranch       Tue Aug 28 00:06:51 2018 +0200
    gh-pages        Tue Feb 6 21:12:34 2018 +0100
    some_branch     Thu Feb 1 20:57:43 2018 +0100
    test            Thu Feb 6 18:47:16 2014 -0800

脚本:

    #!/bin/bash
    for k in $(git branch | sed /\*/d); do
      if [ -n "$(git log -1 --before='2019-12-31' -s $k)" ]; then
        git branch -m $k OLD_$k
      fi
    done

运行脚本的输出:

zrrbite@ZRRBITE MINGW64 /d/dev/git/jspaint (OLD_test)
$ git branch
  OLD_gh-pages
  OLD_newbranch
  OLD_newnewbr
  OLD_some_branch
* OLD_test

现在您可以手动推送这些分支并删除远程上的旧分支。如果您想推送重命名的分支并自动删除旧分支,您可以将脚本重写为:

    #!/bin/bash
    for k in $(git branch | sed /\*/d); do
      if [ -n "$(git log -1 --before='2019-12-31' -s $k)" ]; then
        git branch -m $k OLD_$k
        git push origin --delete $k
        git push origin OLD_$k
      fi
    done

如果您想更进一步并假设您没有签出本地分支机构,您可以改为:

  • 检查git branch -r(对于远程分支)
  • 检查分支并在适用时将其重命名
  • 推动分支
  • 删除旧的

如果您有很多分支,并且没有本地副本,那么尝试这种方法可能是明智的。


推荐阅读