Description 450 -> 266 chars, body 1044 -> 462 words. The bisect procedure moves to references/bisect.md. The boundary clause read 'not writing or rewriting commits', which disclaimed the cherry-pick and revert this skill's own Step 3 executes; it now excludes authoring and rebasing only. Adds 'backport' so cherry-pick is reachable by natural language at all, accepting 266 chars against a 250 soft target and a 400 ceiling.
3.2 KiB
3.2 KiB
name, description, metadata, allowed-tools
| name | description | metadata | allowed-tools | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| git-history | Use when investigating git history — querying logs, tracing when a change landed, bisecting the commit that broke something, or locating one to revert or backport. Not authoring or rebasing commits -> `git-commits`. Not history on a Gitea server -> `gitea-branches`. |
|
Bash |
Gotchas
-S"string"matches only where the string's count changed, so a line edited in place matches-G"regex"and not-S. Reach for-Gwhenever the string may have moved rather than appeared.--followtraces renames for exactly one path. Given several paths or a glob it fails instead of degrading, so run it once per file.- Under
git bisect run, exit128or above aborts the session rather than marking the commit bad, so a crashing test script ends the search silently. - Bisect answering "cannot find exact culprit" beside skipped commits is a complete result: it is as precise as the skip range allows.
Step 1 — Pick the entry procedure
| What is known | Procedure |
|---|---|
| Content, a file, or a line range to search for | Query the log — Step 2 |
| Nothing to search for — only that the behaviour changed between two points | Bisect — read references/bisect.md |
| The commit itself, already identified | Step 3 |
Step 2 — Query the log
Default to git log --oneline, then narrow by whatever is known:
- Content:
git log -S"string", or-G"regex"to match any diff line.--pickaxe-regexmakes the-Sargument a POSIX ERE;--pickaxe-allshows every file in a matching changeset. - A line or function:
git log -L <start>,<end>:<file>orgit log -L :<function>:<file>. Confirm the range resolves before reporting on it — an off-by-one silently omits the target. - A file across renames:
git log --follow -- <file>. Without--followthe history stops at the rename boundary. - Mainline only:
--first-parentfollows the integration branch and skips commits merged in from side branches. - Structured output:
git log --format="%h | %s | %an (%ar)".
If you need the placeholder catalogue, format presets, --diff-filter letters, full -L syntax, ancestry filters, pickaxe binary-file behaviour, or git diff output-control flags such as --stat, --word-diff and the whitespace options, read references/git-log-format.md.
Step 3 — Act on a located commit
Offer the operation and its consequence; run it only once the user has chosen.
git cherry-pick <commit>copies the commit's changes onto the current HEAD — for backporting a fix to another branch.git revert <commit>adds a new commit undoing it — for un-applying merged work without rewriting history.git blame <file>attributes each line to the commit that last touched it, when the question is which commit introduced one specific line.
For diff output control on the located commit, read references/git-log-format.md.
Step 4 — Return the result
Report each located commit in this shape, so a calling agent can act on it without reparsing raw log output:
<sha> — <subject>
<author> (<relative date>)
Recommendation: <action or "none">