如何创建自定义git/bash脚本实现git recent查看最近切换分支功能?
实现自定义
git recent 命令方案 方法一:通过Git别名实现(最简便)
直接在终端运行以下命令即可完成全局配置:
git config --global alias.recent '!f() { local count=${1:-5}; git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '\''{ print $3 }'\'' | awk '\''!x[$0]++'\'' | egrep -v "^[a-f0-9]{40}$" | head -n$count; }; f'
配置完成后即可直接使用:
- 运行
git recent默认返回最近切换的5个分支 - 运行
git recent 20返回最近切换的20个分支,参数可自定义为任意数值
提示:如果后续需要删除该别名,运行
git config --global --unset alias.recent即可。
方法二:通过独立脚本实现(适合后续扩展复杂逻辑)
如果后续要给该命令增加更多功能,推荐用独立脚本的方式实现:
- 在
$PATH包含的目录(例如~/.local/bin)下新建名为git-recent的文件 - 写入以下代码:
#!/bin/bash # 自定义git命令:查看最近切换的分支 count=${1:-5} git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '{ print $3 }' | awk ' !x[$0]++' | egrep -v '^[a-f0-9]{40}$' | head -n$count
- 给文件添加执行权限:
chmod +x ~/.local/bin/git-recent - 配置完成后即可全局调用
git recent命令,参数规则和别名方案完全一致。
脚本运行原理解析
你提供的命令是通过管道串联多个工具实现需求,每段命令的作用如下:
git reflog:输出Git本地引用日志,记录了所有分支切换、提交、重置等操作的历史记录egrep -io "moving from ([^[:space:]]+)":用正则匹配所有分支切换操作产生的moving from 分支名记录,i参数忽略大小写,o参数只输出匹配到的内容awk '{ print $3 }':按空格分割每行内容,输出第三段,也就是切换前的分支名awk ' !x[$0]++':对输出的分支名去重,保留第一次出现的顺序,也就是按最近使用的先后排序egrep -v '^[a-f0-9]{40}$':过滤掉40位的Git commit哈希值,只保留可读的分支名head -n$count:取前count条结果,count默认值为5,支持传入自定义数值调整返回条数
Bash脚本与Git自定义命令学习建议
- 先掌握Shell基础语法:重点学习变量定义、位置参数传递、管道符、重定向的用法,以及
grep、awk、sed三个文本处理工具的常用功能,即可满足绝大多数日常自定义小工具的开发需求 - 再深入Git高级特性:学习Git引用存储逻辑、reflog的作用、自定义Git命令的两种实现规则,可扩展更多提升工作效率的Git专属操作
- 最后通过实战进阶:从实现小功能入手,比如批量处理Git仓库、自动打包部署脚本、文件批量重命名工具等,逐步掌握条件判断、循环、函数等Bash复杂语法
内容的提问来源于stack exchange,提问作者gnarois
相关产品推荐
相关产品推荐

