git-data-recovery
Installation
SKILL.md
Git Data Recovery
Lost commits survive until gc prunes (default: 14 days dangling, 90 days reflog-reachable). Recovery is a race against gc.
Path 1: Reflog (for commits you were on)
git reflog # HEAD history
git reflog show <branch> # per-branch
git log -g --oneline # same as log
git branch rescue <sha>
git reset --hard HEAD@{5}
git cherry-pick HEAD@{1}
Reflog is local, per-ref. A fresh clone has none.
Path 2: fsck (when reflog is gone)
git fsck --full --no-reflogs --unreachable --lost-found
# dangling commit abc...
--lost-found writes objects to .git/lost-found/{commit,other}/.
Inspect candidates:
for sha in $(git fsck --no-reflog --unreachable | awk '/commit/ {print $3}'); do
git log -1 --format='%h %ci %s' "$sha"
done
git branch rescue <sha>
Path 3: One File from a Commit
git show <sha>:path > recovered
git checkout <sha> -- path
Protect Before Risky Ops
git tag rescue/$(date +%s) HEAD
git update-ref refs/rescue/before-rebase HEAD
Any ref under refs/ keeps objects reachable indefinitely.
gc / Prune
- Auto-triggers at ~7,000 loose objects or 50+ packfiles.
git gc --prune=nowimmediately deletes unreachable objects — do not run during recovery.git reflog expire --expire-unreachable=now --all && git gc --prune=nowdestroys recovery paths.
Find Large Objects
git rev-list --objects --all \
| git cat-file --batch-check='%(objectname) %(objecttype) %(objectsize) %(rest)' \
| awk '$2=="blob"{print $3,$4}' | sort -n | tail -20
Purge: git filter-repo --path <file> --invert-paths.
Pitfalls
- Debug on the original working copy; a fresh clone has no reflog.
- Don't "clean up" before verifying recovery — many one-liners silently destroy it.
Weekly Installs
3
Repository
narenaryan/agent-skillsFirst Seen
1 day ago
Security Audits
Installed on
amp3
cline3
opencode3
cursor3
kimi-cli3
warp3