用途
git-split 是一个关于 Git 历史管理的代码重构工作流提示词,用于把大型文件拆分为更小、职责更聚焦的模块,并在拆分过程中保留被抽取代码的完整 Git 历史(blame、log)。它面向的是需要重构巨型源文件、又不希望丢失代码追溯信息的开发场景。
主要能力
- 提供「分支-合并」(branch-merge)技术来保留 Git 历史:从文件初始提交创建分支,在该分支上进行拆分改动,再用特殊合并策略合回,从而让新文件继承原文件的历史记录。
- 提供分析步骤:查看文件历史、定位引入该文件的首次提交、统计行数并识别逻辑分节。
- 提供拆分规划要点:逻辑分组、依赖关系、命名、以及用于保持向后兼容的 barrel exports(桶导出)。
- 提供历史分支创建与合并的具体命令流程。
- 提供简化替代方案:在不需要精确历史保留时,使用 git mv 配合 Git 的重命名检测能力。
- 提供工作流小结与最佳实践、常见陷阱清单。
使用方式
该提示词以交互方式被使用,包含以下环节:
- 工具与前提要求:Git CLI 必须可用;工作区应当干净(无未提交更改);应当位于特性分支,而非 main 分支。文档给出了检测命令:使用 git status --porcelain 校验工作区,使用 git rev-parse --abbrev-ref HEAD 判断当前分支,若为 latest、main 或 master 则报错并退出。
- 分析文件:使用 git log --oneline --follow 查看历史,使用 git log --diff-filter=A --follow --format="%H" 查找首次引入文件的提交,使用 wc -l 统计行数。
- 规划拆分:确定逻辑分组、依赖、命名方案与 barrel exports。
- 创建历史分支:定位引入文件的首次提交,用 git checkout -b split-history "${first_commit}^" 从首个提交的父提交创建分支,然后以复制(而非移动)方式把原文件复制到新位置,提交并加注说明为拆分准备。
- 回到特性分支并合并:使用 git checkout - 返回,使用 git merge split-history --no-commit -X ours 合并,随后实际编辑内容——裁剪新文件只保留各自部分、更新原文件为再导出或移除、更新代码库中的导入,最后统一提交。
- 清理与验证:使用 git branch -d split-history 删除临时分支,用 git log --follow 与 git blame 验证历史是否保留。
当用户传入 help 选项时,提示词要求解释用法、说明是否缺少前置条件或工具要求,并且在完成这些说明后立即退出,不继续执行。
适用场景
- 将体积庞大、职责混杂的源文件重构为多个聚焦模块。
- 需要在重构后仍能对抽取出的代码执行 blame / log 追溯。
- 位于特性分支上的重构工作,且希望一次性、原子地更新所有导入引用。
限制与注意事项
- 依赖 Git CLI,并且要求干净的工作区与特性分支;主分支(latest、main、master)上不允许执行拆分。
- 若他人正在该分支上工作,不应强制推送。
- 若原文件属于公共 API,不要遗漏 barrel exports。
- 需规划拆分以避免引入循环依赖。
- 拆分后应运行测试以确保未破坏现有功能。
- 资料中未提供该工具的收费、价格、平台支持范围与性能指标等信息。