工作中你有没有遇到过这种情况:
某个功能写了一堆 commit,最后要上线前合并成一个。每次都要输入这一长串命令:
git reset --soft HEAD~2 && git commit --edit -m "" --no-verify
要么输错,要么复制粘贴,很烦很低效。
于是我干脆搞了个自己的 Git 命令行工具 —— gix,一键解决这些重复操作,体验丝滑不止一点点。
这篇文章就是我开发这个工具的起点:从痛点出发,到最小可用版本上线,再到未来的功能扩展,一步步落地。
我们团队在提交代码时有一些默认规范,比如:
但是这些事情:
举个例子,我之前经常得输入下面这段命令来 squash 最近两个提交:
git reset --soft HEAD~2 && git commit --edit -m "feat: 优化主题切换逻辑" --no-verify
这段命令熟是熟了,但每次都要想一下、改一下 message、还要加 --no-verify……真的烦。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
于是我就动手搞了一个 CLI 工具,名字就叫 gix —— git 扩展工具的意思。
它的目标非常简单:
用一句 gix squash 命令,干掉所有重复操作。
现在 gix 已经支持多个高频 Git 操作,后续还会不断扩展。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/yudao-cloud
- 视频教程:https://doc.iocoder.cn/video/
我用的是 TurboRepo + pnpm
做 monorepo,结构如下:
/gix
├── packages
│ ├── cli # 核心 CLI 命令模块
│ └── docs # 文档站点(VuePress)
├── .gitignore
├── turbo.json
└── package.json
技术选型:
| | |
|---|
| Node.js + Commander + Prompts | |
| | |
| | |
以下是目前 gix 支持的几个核心功能👇
gix merge: 交互式合并任意两个提交
gix merge
会提示你输入:
也可以直接指定:
gix merge -f -m "feat: 合并优化配置文件逻辑"
gix squash: 快速合并最近 N 次提交
gix squash -n 3 # 合并最近 3 次提交
gix squash --all # 从第一个提交开始合并(全量 squash)
gix doctor: 诊断 Git 仓库状态
gix doctor
会检查:
gix reset: 软重置到远程分支
gix reset
等价于:
git reset --soft origin/your-branch
保留所有本地变更,仅撤销本地 commit,适合重开合并、重提 PR 等场景。
https://github.com/nianyi778/gix-cli