Tools git advanced
Skill tjboudreaux/cc-github-skills/skills/tools-git-advanced
Advanced git operations including rebase, cherry-pick, bisect, reflog, stash, and history manipulation for complex workflows.From its SKILL.md
npx -y skills add tjboudreaux/cc-github-skills --skill tools-git-advancedAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.0 KB, as published. Nobody here has run it
Advanced Git Operations
Overview
Advanced git commands for complex workflows, history manipulation, and debugging. Use this skill for rebasing, cherry-picking, finding bugs, and recovering from mistakes.
When to Use
- Rebasing branches and cleaning history
- Cherry-picking specific commits
- Finding which commit introduced a bug
- Recovering lost commits
- Complex merge scenarios
- Stash management
Interactive Rebase
Start Rebase
git rebase -i HEAD~5 # Last 5 commits
git rebase -i main # Onto main
git rebase -i --root # All commits
Rebase Commands
| Command | Action |
|---|---|
pick | Keep commit as-is |
reword | Change commit message |
edit | Stop to amend commit |
squash | Combine with previous |
fixup | Combine, discard message |
drop | Remove commit |
exec | Run shell command |
Common Rebase Operations
# Squash last 3 commits
git rebase -i HEAD~3
# Change 'pick' to 'squash' for commits to combine
# Reorder commits
git rebase -i HEAD~5
# Reorder lines in editor
# Edit commit message
git rebase -i HEAD~3
# Change 'pick' to 'reword'
# Split a commit
git rebase -i HEAD~3
# Change 'pick' to 'edit'
git reset HEAD~
git add -p && git commit
git add -p && git commit
git rebase --continue
Rebase onto Branch
git rebase main # Rebase current onto main
git rebase main feature # Rebase feature onto main
git rebase --onto main A B # Rebase B onto main, starting from A
Abort/Continue
git rebase --continue # After resolving conflicts
git rebase --skip # Skip current commit
git rebase --abort # Cancel rebase
Cherry-Pick
git cherry-pick <commit> # Apply single commit
git cherry-pick A B C # Multiple commits
git cherry-pick A..B # Range (exclusive A)
git cherry-pick A^..B # Range (inclusive A)
git cherry-pick -n <commit> # No auto-commit
git cherry-pick -x <commit> # Add source reference
git cherry-pick --abort # Cancel
git cherry-pick --continue # After conflict
Cherry-Pick from Another Branch
git log other-branch --oneline # Find commit hash
git cherry-pick abc123 # Apply it
Git Bisect (Find Bug)
Basic Bisect
git bisect start # Start bisecting
git bisect bad # Current commit is bad
git bisect good v1.0 # Known good commit
# Git checks out middle commit
# Test and mark:
git bisect good # This commit is OK
git bisect bad # This commit has bug
# Repeat until found
git bisect reset # End bisect
Automated Bisect
git bisect start HEAD v1.0
git bisect run npm test # Auto-run test
git bisect run ./test-script.sh # Custom script
# Script: exit 0 = good, exit 1 = bad
Bisect Log
git bisect log # Show bisect history
git bisect log > bisect.log # Save for replay
git bisect replay bisect.log # Replay session
Reflog (Recovery)
View Reflog
git reflog # HEAD history
git reflog show main # Branch history
git reflog --date=relative # With timestamps
Recover Lost Commits
# After bad reset
git reflog
git reset --hard HEAD@{2} # Go back 2 moves
# Recover deleted branch
git reflog
git checkout -b recovered HEAD@{5}
# Find lost stash
git fsck --unreachable | grep commit
git show <commit>
Stash Management
Basic Stash
git stash # Stash changes
git stash -u # Include untracked
git stash -a # Include ignored
git stash push -m "message" # With message
git stash push path/to/file # Specific files
List & Apply
git stash list # List stashes
git stash show # Show latest diff
git stash show -p stash@{1} # Full diff
git stash apply # Apply latest
git stash apply stash@{2} # Apply specific
git stash pop # Apply and remove
git stash drop stash@{1} # Remove stash
git stash clear # Remove all
Branch from Stash
git stash branch newbranch # Create branch from stash
Reset vs Revert
Reset (Rewrite History)
git reset --soft HEAD~1 # Undo commit, keep staged
git reset --mixed HEAD~1 # Undo commit, unstage (default)
git reset --hard HEAD~1 # Undo commit, discard changes
git reset --hard origin/main # Match remote exactly
Revert (Safe, Creates Commit)
git revert <commit> # Revert single commit
git revert HEAD~3..HEAD # Revert range
git revert -n <commit> # No auto-commit
git revert -m 1 <merge-commit> # Revert merge
Amending
git commit --amend # Edit last commit message
git commit --amend -m "new msg" # Replace message
git commit --amend --no-edit # Add staged, keep message
git commit --amend --author="Name <email>" # Fix author
Clean & Prune
git clean -n # Dry run
git clean -f # Remove untracked files
git clean -fd # Include directories
git clean -fX # Only ignored files
git gc # Garbage collect
git prune # Remove unreachable objects
Worktrees
git worktree list # List worktrees
git worktree add ../feature feature-branch
git worktree add ../hotfix -b hotfix
git worktree remove ../feature # Remove worktree
git worktree prune # Clean stale
Blame & Log
git blame <file> # Who changed each line
git blame -L 10,20 <file> # Lines 10-20
git log -p <file> # File history with diffs
git log --follow <file> # Follow renames
git log -S "searchterm" # Commits adding/removing text
git log -G "regex" # Commits matching regex
git log --all --oneline --graph # Visual history
Patches
git format-patch HEAD~3 # Create patch files
git format-patch main..feature # Branch patches
git apply patch.patch # Apply patch
git am patch.patch # Apply as commit
Troubleshooting
| Scenario | Solution |
|---|---|
| Undo last commit | git reset --soft HEAD~1 |
| Undo pushed commit | git revert <commit> |
| Wrong branch commit | Cherry-pick to correct branch |
| Lost commits | git reflog to find and recover |
| Bad rebase | git rebase --abort or reflog |
| Merge conflict hell | git merge --abort and retry |
| Detached HEAD | git checkout -b newbranch |