🚀 从 Git 操作痛点出发,我为什么开发了 gix?
工作中你有没有遇到过这种情况:
- 某个功能写了一堆 commit,最后要上线前合并成一个。
- 每次都要输入这一长串命令:
css
git reset --soft HEAD~2 && git commit --edit -m "<msg>" --no-verify
- 要么输错,要么复制粘贴,很烦很低效。
于是我干脆搞了个自己的 Git 命令行工具 ------ gix,一键解决这些重复操作,体验丝滑不止一点点。
这篇文章就是我开发这个工具的起点:从痛点出发,到最小可用版本上线,再到未来的功能扩展,一步步落地。
🧨 痛点:重复的 Git 操作太机械
我们团队在提交代码时有一些默认规范,比如:
-
提交前先 squash 掉多余的 commit
-
commit message 按照格式书写
-
保持提交历史整洁
但是这些事情:
-
Git 本身不智能,你只能记住或保存那些命令
-
重复性高,每个功能分支可能都要做一遍
-
容易出错,命令输错一个参数就得翻车
举个例子,我之前经常得输入下面这段命令来 squash 最近两个提交:
perl
git reset --soft HEAD~2 && git commit --edit -m "feat: 优化主题切换逻辑" --no-verify
这段命令熟是熟了,但每次都要想一下、改一下 message、还要加 --no-verify......真的烦。
🧪 解法:做一个自己的 Git 命令行工具
于是我就动手搞了一个 CLI 工具,名字就叫 gix ------ git 扩展工具的意思。
它的目标非常简单:
用一句 gix squash 命令,干掉所有重复操作。
现在 gix 已经支持多个高频 Git 操作,后续还会不断扩展。
🧱 项目结构:Monorepo 模式开发 CLI
我用的是 TurboRepo + pnpm 做 monorepo,结构如下:
bash
/gix
├── packages
│ ├── cli # 核心 CLI 命令模块
│ └── docs # 文档站点(VuePress)
├── .gitignore
├── turbo.json
└── package.json
技术选型:
部分 | 技术 | 理由 |
---|---|---|
CLI 开发 | Node.js + Commander + Prompts | 快速开发,交互体验好 |
项目结构 | Monorepo + TurboRepo | 模块清晰,依赖统一管理 |
文档网站 | VuePress | 写文档简单,样式可自定义 |
✅ 功能速览与使用方式
以下是目前 gix 支持的几个核心功能👇
🔀
gix merge
:交互式合并任意两个提交
sql
gix merge
会提示你输入:
-
起始和结束的 commit(可选)
-
新的 commit 信息
-
是否强制推送
也可以直接指定:
sql
gix merge -f <from> -m "feat: 合并优化配置文件逻辑"
🧹
gix squash
:快速合并最近 N 次提交
python
gix squash -n 3 # 合并最近 3 次提交
gix squash --all # 从第一个提交开始合并(全量 squash)
🩺
gix doctor
:诊断 Git 仓库状态
gix doctor
会检查:
- 当前是否为 Git 仓库
- 当前是否干净(无修改未提交)
- 当前 Git 分支状态
- 是否配置远程仓库
- Git / Node.js 版本
♻️
gix reset
:软重置到远程分支
perl
gix reset
等价于:
bash
git reset --soft origin/your-branch
保留所有本地变更,仅撤销本地 commit,适合重开合并、重提 PR 等场景。
🧩 项目地址(欢迎 Star)
🔮 后续规划
功能 | 描述 |
---|---|
gix config | 全局配置默认参数(如默认 squash 数量) |
gix changelog | 自动生成 changelog |
gix release | 一键打版本号 + tag + push |
🎣 最后问你一个问题:
👉 你平时有没有哪些 Git 操作特别机械、重复、容易出错?
欢迎评论告诉我,我来用 gix 帮你变成一条命令。
如果你觉得这篇文章对你有帮助,别忘了点赞 + 收藏支持下!
下一篇我会分享:如何用 Node.js + commander 快速搭建 CLI 工具骨架,记得关注~