Claude-skill-registry jj:squash
Squash changes from working copy into relevant ancestor commits
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/jj-squash-jbott-nix-config" ~/.claude/skills/majiayu000-claude-skill-registry-jj-squash && rm -rf "$T"
manifest:
skills/data/jj-squash-jbott-nix-config/SKILL.mdsource content
Squash Changes Into Ancestors
Move changes from the current working copy into appropriate ancestor commits.
Process
- Run
andjj diff --summary
for overviewjj diff --stat - Run
to see candidate ancestor commitsjj log -r ::@- --limit 15 - Analyze changes:
- Small (≤5 files, ≤200 lines): run
directlyjj diff - Large: use
for structured summary/jj-context
- Small (≤5 files, ≤200 lines): run
- Match changes to commits by path and commit descriptions
- Execute squashes
Basic Usage
Without options,
jj squash moves all changes from @ into its parent:
jj squash # squash @ into @-
Whole Files
jj squash --into <change-id> path/to/file.py # -t is short for --into jj squash --into <change-id> "src/**/*.py" # glob pattern jj squash --into @-- # into grandparent
Sub-File Chunks
For extracting specific hunks (not whole files):
-
Save original @ change ID:
jj log -r @ --no-graph -T 'change_id' -
Create intermediate commit:
jj new --insert-before @ -
Write only the hunks for target commit (use Edit tool)
-
Squash into target:
jj squash --into <target-change-id> -
Return to rebased @ and remove duplicated hunks:
jj edit <rebased-@-change-id> -
Restore working copy:
jj new
Notes
- Always use change IDs (e.g.,
) not commit IDs - they're stable across rewritesksrmwuon - After squashing, @ remains as working copy (empty if all changes moved)