| name | git-advanced-workflows |
| description | Master advanced Git workflows including rebasing, cherry-picking, bisect, worktrees, and reflog to maintain clean history and recover from any situation. Use when managing complex Git histories, collaborating on feature branches, or troubleshooting repository issues. |
Git Advanced Workflows
Master advanced Git techniques to maintain clean history, collaborate effectively, and recover from any situation with confidence.
When to Use This Skill
- Cleaning up commit history before merging
- Applying specific commits across branches
- Finding commits that introduced bugs
- Working on multiple features simultaneously
- Recovering from Git mistakes or lost commits
- Managing complex branch workflows
- Preparing clean PRs for review
- Synchronizing diverged branches
Core Concepts
1. Interactive Rebase
Interactive rebase is the Swiss Army knife of Git history editing.
Common Operations:
pick: Keep commit as-is
reword: Change commit message
edit: Amend commit content
squash: Combine with previous commit
fixup: Like squash but discard message
drop: Remove commit entirely
Basic Usage:
git rebase -i HEAD~5
git rebase -i $(git merge-base HEAD main)
git rebase -i abc123
2. Cherry-Picking
Apply specific commits from one branch to another without merging entire branches.
git cherry-pick abc123
git cherry-pick abc123..def456
git cherry-pick -n abc123
git cherry-pick -e abc123
3. Git Bisect
Binary search through commit history to find the commit that introduced a bug.
git bisect start
git bisect bad
git bisect good v1.0.0
git bisect good
git bisect reset
Automated Bisect:
git bisect start HEAD v1.0.0
git bisect run ./test.sh
4. Worktrees
Work on multiple branches simultaneously without stashing or switching.
git worktree list
git worktree add ../project-feature feature/new-feature
git worktree add -b bugfix/urgent ../project-hotfix main
git worktree remove ../project-feature
git worktree prune
5. Reflog
Your safety net - tracks all ref movements, even deleted commits.
git reflog
git reflog show feature/branch
git reflog
git checkout abc123
git branch recovered-branch
git reflog
git branch deleted-branch abc123
Detailed patterns and worked examples
Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.
Best Practices
- Always Use --force-with-lease: Safer than --force, prevents overwriting others' work
- Rebase Only Local Commits: Don't rebase commits that have been pushed and shared
- Descriptive Commit Messages: Future you will thank present you
- Atomic Commits: Each commit should be a single logical change
- Test Before Force Push: Ensure history rewrite didn't break anything
- Keep Reflog Aware: Remember reflog is your safety net for 90 days
- Branch Before Risky Operations: Create backup branch before complex rebases
git push --force-with-lease origin feature/branch
git branch backup-branch
git rebase -i main
git reset --hard backup-branch
Common Pitfalls
- Rebasing Public Branches: Causes history conflicts for collaborators
- Force Pushing Without Lease: Can overwrite teammate's work
- Losing Work in Rebase: Resolve conflicts carefully, test after rebase
- Forgetting Worktree Cleanup: Orphaned worktrees consume disk space
- Not Backing Up Before Experiment: Always create safety branch
- Bisect on Dirty Working Directory: Commit or stash before bisecting
Recovery Commands
git rebase --abort
git merge --abort
git cherry-pick --abort
git bisect reset
git restore --source=abc123 path/to/file
git reset --soft HEAD^
git reset --hard HEAD^
git reflog
git branch recovered-branch abc123