关于 re0-git
re0-git 是一项重写已有提交说明的技能,让新会话无需查看差异也能从日志继续工作。它遵循仓库本地风格,只改说明,不改工作树内容。
主要功能
- 01重写已有提交说明
- 02参考附近日志的惯例
- 03保留持久有效的交接信息
- 04保持工作树内容不变
- 05签署重写提交并核对日期
适用场景
- 01精简冗长的 HEAD 提交说明
- 02整理尚未推送的短提交范围以便交接
- 03让提交日志无需差异内容也易于理解
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lilmgenius/ paperthin --skill re0-git安装后在 Claude Code 中输入/re0-git确认已加载。
详细介绍
用作者自己的口吻重写已完成的提交消息,让日志本身就能交接后续工作,而不是套用强加的风格。
目标
反复 amend 和顺势提交会让消息变得臃肿、过时或充斥琐事。re0-git 会将消息改写为简洁版本,让新会话无需查看 diff,仅凭 git log 就能继续工作。它只润色作者已有的写法。只有消息会改变;时间戳按下方的日期规则处理,工作树绝不改变。
这是由用户主动调用的工具——在你决定提交后再运行。若 Agent 随手就能使用提交清理工具,可能会让它倾向于在不该提交时提交。
工作流
- 确定目标范围——通常是
HEAD,有时是一个较短的未推送提交范围。 - 阅读改动(
git show --stat、git diff)和任何有文档记录的提交规则。然后抽样查看附近的非目标提交消息:从 10 条开始,若风格约定已明显则提前停止,否则仅在需要弄清约定时扩大范围。 - 按以下顺序处理风格不一致的日志:项目文档中的规则、涉及同一区域的附近提交,然后是遵循该约定的同一作者的提交。不要折中兼容的风格,也不要让某位作者的习惯凌驾于仓库规范之上。
- 按提交精简原则(见下文)重写消息:只保留可长期作为交接依据的事实,将辅助改动并入其所服务的改动,并删掉 diff 或标签已能证明的内容。琐事不要单独列成条目。
- 使用签名重新提交,并按下方规则处理日期。对于最新提交(
HEAD):git commit --amend -S --date=now——--date=now会将作者日期更新为当前时间;单独使用--amend只会重置提交者日期,作者日期仍会过时。对于较旧的提交,若要保留其日期:重建该提交——GIT_AUTHOR_DATE/GIT_COMMITTER_DATE git commit-tree <tree> -p <parent> -S -m "<new message>"——然后将每个后代提交重放到重建后的提交上(重写非最新提交属于 rebase,而不是移动引用),否则就会使它们成为孤立提交。 - 验证并汇报。
规则
- 绝不创建或建议创建提交——re0-git 只重写已有提交的消息。使用它绝不是提交的理由。
- 只改消息——工作树必须保持字节级一致(
git diff <old> <new>为空);运行 re0-git 时绝不编辑内容。 - 提交精简原则——本技能强制执行的提交消息标准:每项真实、持久的改动对应一个条目,并将辅助改动并入其中;不写 diff 或版本号已能证明的内容,不加共同作者标签,并与本地日志经抽样确认的风格一致。如果抽样后仍看不出稳定风格,则退回为主题行、空行,接着每项改动各用一个
-条目,每条都写成不换行的单行——绝不写解释性段落,因为日志应该列出事实,而不是加以解释。对于文档中明确要求任何此类改动都必须执行的步骤(注册新技能、修改源文件后同步翻译文档),执行该流程只是证明流程已走完,并非此次改动的事实——将其作为末尾从句并入所服务的条目,若该条目已隐含此事则删除;只有当执行方式本身并非显而易见时,才值得单独列为条目。初稿也遵循相同标准;re0-git 只会对已经偏离标准的消息执行该原则。 - 按位置处理日期;始终使用 GPG 签名。 正在完成的提交——
HEAD——作者日期和提交者日期都设为当前时间,因为重新清理最新提交本身就是持续进行的工作。所有更早的提交(HEAD~1及更早)都保留原有作者日期和提交者日期;绝不篡改过去的时间戳。 - 未经明确确认,绝不重写已推送或共享的历史——这会导致必须强制推送。
验证
git diff <old-tip> <new-tip>为空——内容未改变。- 每个重写后的提交都带有 GPG 签名(
%G?=G),日期也符合预期。 - 隐藏 diff,仅重新阅读
git log——如果发现删掉的任何一行是理解改动所必需的,就将其恢复。
评论
支持 Markdown