🚀 从 Git 操作痛点出发,我为什么开发了 gix?

🚀 从 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)

👉 github.com/nianyi778/g...


🔮 后续规划

功能 描述
gix config 全局配置默认参数(如默认 squash 数量)
gix changelog 自动生成 changelog
gix release 一键打版本号 + tag + push

🎣 最后问你一个问题:

👉 你平时有没有哪些 Git 操作特别机械、重复、容易出错?

欢迎评论告诉我,我来用 gix 帮你变成一条命令。


如果你觉得这篇文章对你有帮助,别忘了点赞 + 收藏支持下!

下一篇我会分享:如何用 Node.js + commander 快速搭建 CLI 工具骨架,记得关注~

相关推荐
lang201509283 分钟前
Apache Ignite 与 Spring Boot 集成
spring boot·后端·apache·ignite
excel10 分钟前
JavaScript 中 WeakMap、WeakSet、Set、Map、Object、Array 的区别与应用场景
前端
Asthenia041213 分钟前
深入剖析 Spring Boot 请求处理链路与 Servlet 的本质
后端
旧时光巷14 分钟前
【Flask 基础 ①】 | 路由、参数与模板渲染
后端·python·零基础·flask·web·模板渲染·路由系统
小醉你真好18 分钟前
Spring Boot 数据源配置中为什么可以不用写 driver-class-name
spring boot·后端·源代码管理
SirLancelot141 分钟前
数据结构-Set集合(一)Set集合介绍、优缺点
java·开发语言·数据结构·后端·算法·哈希算法·set
haaaaaaarry1 小时前
Element Plus常见基础组件(一)
java·前端·javascript·vue.js
追逐时光者1 小时前
2 款 .NET 开源、简洁、高效的 PDF 文档操作库
后端·.net
qingyingWin1 小时前
原生微信小程序研发,如何对图片进行统一管理?
前端·微信小程序
Goboy1 小时前
分库分表后ID乱成一锅粥
后端·面试·架构