返回 Skills 目录
lilmgenius/paperthin已通过检查

SKILL DETAIL

re0-git

lilmgenius/paperthin/re0-git

re0-git 是一个用户主动调用的技能,用于重写已完成提交的提交信息,使其符合提交经济性原则,从而让后续会话仅通过 git log 就能理解变更,无需查看差异。该技能只修改提交信息,不改变代码树内容,并确保提交保持 GPG 签名。 使用时,技能会先确定目标提交(通常是 HEAD),检查变更内容,并采样附近提交以确定本地日志风格。然后按照提交经济性原则重写信息:每个真实、持久的变更对应一个要点,支持性编辑合并到相关变更中,删除差异或版本已证明的内容,不添加合作者标签。对于 HEAD 提交,会使用 --amend --date=now 更新作者日期;对于更早的提交,则保留原始日期,通过重建提交并重放后代来实现。该技能不会创建或建议提交,也不会重写已推送或共享的历史记录,除非获得明确确认。

安装量 · 364查看来源

Installation

npx skills add https://github.com/lilmgenius/paperthin --skill re0-git

技能文件

SKILL.md

最近同步 · 2026年8月27日

SKILL.md›
---
name: re0-git
disable-model-invocation: true
description: "Rewrite a finished commit's message into a clean, handoff-ready form in your own log style, so `git log` alone tells the story. User-invoked: run it after a commit."
---

Rewrite a finished commit message so the log hands off on its own — in the author's own voice, not an imposed one.

## Goal

Repeated amends and momentum commits leave a message bloated, stale, or padded with trivia. `re0-git` rewrites the message into a clean version that lets a fresh session continue from `git log` alone, without reading the diff. It refines what the author already writes. Only the message moves — and timestamps, per the date rule below; the tree never changes.

It is **user-invoked** — run it once you've decided to commit. A commit-cleanup tool in the agent's reach would bias it toward committing when it shouldn't.

## Workflow

1. Scope the target — usually `HEAD`, sometimes a short unpushed range.
2. Read the change (`git show --stat`, `git diff`) and any documented commit rules. Then sample nearby non-target messages: start with 10, stop earlier if the convention is obvious, or expand only until the convention is clear.
3. Resolve mixed logs in this order: documented project rules, nearby commits touching the same area, then same-author commits within that convention. Do not average incompatible styles or let one author's habits override the repo.
4. Rewrite the message to the **commit-economy** (below): keep only durable handoff facts, fold supporting edits into the change they serve, and cut anything the diff or tag already proves. Give trivia no bullet of its own.
5. Re-commit signed, dates per the rule below. For the tip (`HEAD`): `git commit --amend -S --date=now` — the `--date=now` is what moves the author date to now; a bare `--amend` resets only the committer date and leaves the author date stale. For an older commit, keeping its dates: rebuild it — `GIT_AUTHOR_DATE`/`GIT_COMMITTER_DATE git commit-tree <tree> -p <parent> -S -m "<new message>"` — then replay every descendant onto the rebuilt commit (a non-tip rewrite is a rebase, not a ref move), or you orphan them.
6. Verify and report.

## Rules

- **Never create or suggest a commit** — re0-git only rewrites the message of a commit that already exists. Using it is never a reason to commit.
- **Message only** — the tree must stay byte-identical (`git diff <old> <new>` empty); never edit content in a re0-git pass.
- **commit-economy** — the commit-message standard this skill enforces: one bullet per real, durable change with supporting edits folded in, nothing the diff or version already proves, no co-author tags, matched to the local log's own shape (sampled above). Where that sampling finds no settled shape, fall back to a subject line, a blank line, then one `-` bullet per change on a single unwrapped line — never prose paragraphs, which explain where a log should list. A step a documented checklist already mandates for any change of this shape (registering a new skill, syncing translated docs after a source edit) is proof the process ran, not a fact about this change — fold it as a trailing clause on the bullet it serves, or drop it if that bullet already implies it; it earns a bullet of its own only when something about *how* it was done is itself non-obvious. The same bar governs the first draft; re0-git only enforces it on a message that already drifted past it.
- **Dates by position; always gpg-signed.** The commit you're finalizing — `HEAD` — takes both author and committer date = now, because re-cleaning the latest commit is itself continued work. Every older commit (`HEAD~1` and back) keeps its original author + committer dates; never restamp the past.
- **Never rewrite pushed or shared history** without explicit confirmation — it forces a force-push.

## Verification

1. `git diff <old-tip> <new-tip>` is empty — content unchanged.
2. Each rewritten commit is gpg-signed (`%G?` = `G`) with dates as intended.
3. Re-read `git log` alone, diff hidden — if any cut line turns out to be needed to follow the change, restore it.