When to Use This Skill
| Use this skill when... |
Use the alternative when... |
Running git gc, repacking objects, or shrinking the .git directory |
Use git-coworker-check first if other agents may be writing to the same checkout |
| Pruning merged local branches and old stashes |
Use git-cli-agentic for read-only branch/stash queries without mutating state |
Verifying repo integrity with git fsck |
Use git-security-checks for secret scanning rather than object integrity |
| Cleaning up a checkout before a long-lived feature branch goes stale |
Use git-rebase-patterns to clean up commit history rather than the object store |
Context
- Current branch: !
git branch --show-current
- Git status: !
git status --porcelain=v2 --branch
- Local branches: !
git branch -vv --format='%(refname:short) %(upstream:short) %(upstream:track)'
- Stash list: !
git stash list
- Repository size: !
du -sh .git
Parameters
Parse these parameters from the command (all optional):
--prune: Remove unreachable objects and run an incremental geometric repack
--gc: Force a full git gc consolidation (only when a repo has degraded badly — prefer the incremental repack)
--background: Register the repo for hourly background maintenance (git maintenance start) instead of a blocking one-shot pass
--verify: Verify integrity of git objects
--branches: Clean up merged branches only
--stash: Clean up stashes only
--all: Run all maintenance tasks (default if no flags specified)
Your task
Perform repository maintenance and cleanup based on the flags provided.
Step 1: Check for accidentally committed files
- Environment files, IDE files, dependencies, build artifacts, secrets
- Suggest adding to
.gitignore and removing with git rm --cached
Step 2: Update .gitignore
- Suggest common patterns if missing
- Offer to append missing patterns
Step 3: Delete merged branches (if --branches or --all)
- List and clean branches merged via GitHub PR
- Protect main, master, develop, staging, production
- Delete local branches safely with
git branch -d
- Require user confirmation before deleting branches
Step 4: Clean up redundant stashes (if --stash or --all)
- Show stash ages and context
- Suggest cleanup for old stashes (>30 days)
- Drop stashes from deleted branches
- Require user confirmation before dropping stashes
Step 5: Repository optimization (if --prune, --gc, --background, or --all)
Prefer incremental maintenance over gc --aggressive. Modern Git (2.31+)
replaced the blocking, rewrite-everything git gc --aggressive pass with
git maintenance and geometric repacking, which organizes packfiles in
logarithmic layers by object count. Geometric repacking is the default for
manual maintenance in recent Git (2.52+) and avoids the destructive,
time-consuming "all-in-one" repack. Default to it.
# Incremental geometric repack — logarithmic pack layering + on-disk
# multi-pack index; far cheaper than `gc --aggressive`, safe to run often
git repack --geometric=2 -d --write-midx
# Prune unreachable objects older than the default grace window
git prune --expire=2.weeks.ago
# Show size improvement
du -sh .git
For hands-off upkeep (--background), register the repo so Git quietly
pre-fetches, optimizes the commit-graph, and repacks loose objects on a
schedule instead of blocking on a manual pass:
# Register hourly background maintenance (one-time, per repo)
git maintenance start
# Or run the standard task set once, on demand (non-blocking, incremental)
git maintenance run --task=commit-graph --task=incremental-repack --task=loose-objects
Reserve a full git gc for a repo that has genuinely degraded (only with
--gc); skip --aggressive unless a one-off deep repack is explicitly needed:
# Full consolidation — only when --gc is requested and the repo is degraded
git gc
Step 6: Verify repository integrity (if --verify or --all)
git fsck --full --strict
Report any issues found.
Step 7: Final summary
- Report all actions taken
- Show before/after metrics
Safe Operations
These operations are safe and non-destructive:
git repack --geometric=2 -d --write-midx - Incremental geometric repack (preferred)
git maintenance run / git maintenance start - Incremental background upkeep
git gc - Full garbage collection (reserve for degraded repos)
git prune - Prune unreachable objects
git fsck - Verify integrity
These require user confirmation:
git branch -d - Delete branches
git stash drop - Drop stashes
Agentic Optimizations
| Context |
Command |
| Routine optimize |
git repack --geometric=2 -d --write-midx |
| Hands-off upkeep |
git maintenance start |
| One-shot incremental pass |
git maintenance run --task=incremental-repack --task=commit-graph |
| Integrity check |
git fsck --full --strict |
| Size before/after |
du -sh .git |
See Also
- git-branch-pr-workflow skill for branch management patterns
1---
2created: 2025-12-16
3modified: 2026-07-04
4reviewed: 2026-07-04
5allowed-tools: Bash(git status *), Bash(git branch *), Bash(git stash *), Bash(git prune *), Bash(git gc *), Bash(git repack *), Bash(git maintenance *), Bash(git fsck *), Bash(git rm *), Bash(du *), Read, Glob, TodoWrite
6args: "[--prune] [--gc] [--background] [--verify] [--branches] [--stash] [--all]"
7argument-hint: "[--prune] [--gc] [--background] [--verify] [--branches] [--stash] [--all]"
8disable-model-invocation: true
9description: "Repo maintenance — incremental repack, gc, branch pruning, stash cleanup, fsck. Use when asked to clean up the repo, run git maintenance/gc, delete merged branches, prune stashes, or shrink .git."
10name: git-maintain
11---
12
13## When to Use This Skill
14
15| Use this skill when... | Use the alternative when... |
16|---|---|
17| Running `git gc`, repacking objects, or shrinking the `.git` directory | Use `git-coworker-check` first if other agents may be writing to the same checkout |
18| Pruning merged local branches and old stashes | Use `git-cli-agentic` for read-only branch/stash queries without mutating state |
19| Verifying repo integrity with `git fsck` | Use `git-security-checks` for secret scanning rather than object integrity |
20| Cleaning up a checkout before a long-lived feature branch goes stale | Use `git-rebase-patterns` to clean up commit history rather than the object store |
21
22## Context
23
24- Current branch: !`git branch --show-current`
25- Git status: !`git status --porcelain=v2 --branch`
26- Local branches: !`git branch -vv --format='%(refname:short) %(upstream:short) %(upstream:track)'`
27- Stash list: !`git stash list`
28- Repository size: !`du -sh .git`
29
30## Parameters
31
32Parse these parameters from the command (all optional):
33
34- `--prune`: Remove unreachable objects and run an incremental geometric repack
35- `--gc`: Force a full `git gc` consolidation (only when a repo has degraded badly — prefer the incremental repack)
36- `--background`: Register the repo for hourly background maintenance (`git maintenance start`) instead of a blocking one-shot pass
37- `--verify`: Verify integrity of git objects
38- `--branches`: Clean up merged branches only
39- `--stash`: Clean up stashes only
40- `--all`: Run all maintenance tasks (default if no flags specified)
41
42## Your task
43
44Perform repository maintenance and cleanup based on the flags provided.
45
46### Step 1: Check for accidentally committed files
47
48- Environment files, IDE files, dependencies, build artifacts, secrets
49- Suggest adding to `.gitignore` and removing with `git rm --cached`
50
51### Step 2: Update .gitignore
52
53- Suggest common patterns if missing
54- Offer to append missing patterns
55
56### Step 3: Delete merged branches (if --branches or --all)
57
58- List and clean branches merged via GitHub PR
59- Protect main, master, develop, staging, production
60- Delete local branches safely with `git branch -d`
61- **Require user confirmation** before deleting branches
62
63### Step 4: Clean up redundant stashes (if --stash or --all)
64
65- Show stash ages and context
66- Suggest cleanup for old stashes (>30 days)
67- Drop stashes from deleted branches
68- **Require user confirmation** before dropping stashes
69
70### Step 5: Repository optimization (if --prune, --gc, --background, or --all)
71
72**Prefer incremental maintenance over `gc --aggressive`.** Modern Git (2.31+)
73replaced the blocking, rewrite-everything `git gc --aggressive` pass with
74`git maintenance` and **geometric repacking**, which organizes packfiles in
75logarithmic layers by object count. Geometric repacking is the default for
76manual maintenance in recent Git (2.52+) and avoids the destructive,
77time-consuming "all-in-one" repack. Default to it.
78
79```bash
80# Incremental geometric repack — logarithmic pack layering + on-disk
81# multi-pack index; far cheaper than `gc --aggressive`, safe to run often
82git repack --geometric=2 -d --write-midx
83
84# Prune unreachable objects older than the default grace window
85git prune --expire=2.weeks.ago
86
87# Show size improvement
88du -sh .git
89```
90
91For hands-off upkeep (`--background`), register the repo so Git quietly
92pre-fetches, optimizes the commit-graph, and repacks loose objects on a
93schedule instead of blocking on a manual pass:
94
95```bash
96# Register hourly background maintenance (one-time, per repo)
97git maintenance start
98
99# Or run the standard task set once, on demand (non-blocking, incremental)
100git maintenance run --task=commit-graph --task=incremental-repack --task=loose-objects
101```
102
103Reserve a full `git gc` for a repo that has genuinely degraded (only with
104`--gc`); skip `--aggressive` unless a one-off deep repack is explicitly needed:
105
106```bash
107# Full consolidation — only when --gc is requested and the repo is degraded
108git gc
109```
110
111### Step 6: Verify repository integrity (if --verify or --all)
112
113```bash
114git fsck --full --strict
115```
116
117Report any issues found.
118
119### Step 7: Final summary
120
121- Report all actions taken
122- Show before/after metrics
123
124## Safe Operations
125
126These operations are safe and non-destructive:
127- `git repack --geometric=2 -d --write-midx` - Incremental geometric repack (preferred)
128- `git maintenance run` / `git maintenance start` - Incremental background upkeep
129- `git gc` - Full garbage collection (reserve for degraded repos)
130- `git prune` - Prune unreachable objects
131- `git fsck` - Verify integrity
132
133These require user confirmation:
134- `git branch -d` - Delete branches
135- `git stash drop` - Drop stashes
136
137## Agentic Optimizations
138
139| Context | Command |
140|---------|---------|
141| Routine optimize | `git repack --geometric=2 -d --write-midx` |
142| Hands-off upkeep | `git maintenance start` |
143| One-shot incremental pass | `git maintenance run --task=incremental-repack --task=commit-graph` |
144| Integrity check | `git fsck --full --strict` |
145| Size before/after | `du -sh .git` |
146
147## See Also
148
149- **git-branch-pr-workflow** skill for branch management patterns