git - 重命名所有旧分支脚本
问题描述
如何重命名最后一次提交早于 2019 年 12 月 31 日的所有分支,在远程存储库的实际名称之前添加“OLD_”
解决方案
这是一个执行您想要的操作的脚本(+ 示例)。
这是我在 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
(对于远程分支) - 检查分支并在适用时将其重命名
- 推动分支
- 删除旧的
如果您有很多分支,并且没有本地副本,那么尝试这种方法可能是明智的。
推荐阅读
- java - 在 Eclipse CDT 中获取执行的 GCC/clang 编译器命令
- node.js - 节点在回调之前等待迭代完成
- c# - 通过 Selenium、ChromeDriver 和 Chrome 执行测试时出现“消息=未知错误:无法聚焦元素”
- python - numpy中的逻辑错误
- python - Python/SQLAlchemy 格式化 DateRange 对象
- javascript - 将十六进制值转换为 unicode 字符
- hyperledger-fabric - Fabric CA 客户端用户注册授权失败
- xml - 如何跳过第一个 xml 元素组(标题行)
- javascript - 如何通过一个按钮添加一个或多个表单并通过javascript通过另一个按钮将其删除
- firebase - 更改 Firebase Firestore 服务器位置