Git Commands & Workflows Guide
Stop second-guessing your Git commands. This visual guide covers every branching strategy in use today — GitFlow, GitHub Flow, trunk-based development — with decision trees for merge vs rebase, interactive rebase recipes, and the "oh no" recovery commands that save your commit history. Includes CI/CD integration patterns showing how each workflow connects to automated pipelines.
What's Included
- Branching Strategies — GitFlow, GitHub Flow, Trunk-Based Development with visual diagrams
- Merge vs Rebase — Decision tree, conflict resolution, when to use each
- Advanced Git Commands — Cherry-pick, stash, reflog, bisect, worktree
- Interactive Rebase Recipes — Squash, reorder, edit, split commits
- Recovery & Undo Guide — Undo commits, recover deleted branches, fix detached HEAD
- CI/CD Integration Patterns — Branch protection, automated testing triggers, release automation
- Git Hooks Reference — Pre-commit, pre-push, commit-msg hooks with examples
-
.gitconfigOptimization — Aliases, diff tools, merge strategies, global ignores
Preview / Sample Content
Merge vs Rebase — Decision Tree
Should I merge or rebase?
│
├── Is this a shared/public branch (main, develop)?
│ └── YES → Always MERGE (never rewrite shared history)
│
├── Is this my local feature branch?
│ ├── Want clean linear history? → REBASE onto main, then merge
│ └── Want to preserve branch topology? → MERGE
│
├── Are there merge conflicts?
│ ├── Simple conflicts → Rebase is fine
│ └── Complex multi-commit conflicts → Merge is safer
│
└── Team convention?
├── "Squash and merge" PRs → Rebase locally, squash on merge
└── "Merge commit" PRs → Merge to preserve full history
Essential Git Commands You Keep Forgetting
# Undo last commit but keep changes staged
git reset --soft HEAD~1
# Undo last commit and unstage changes
git reset --mixed HEAD~1
# Completely discard last commit and changes (DANGEROUS)
git reset --hard HEAD~1
# Amend last commit (message or add forgotten files)
git add forgotten-file.py
git commit --amend --no-edit
# Stash with a descriptive name
git stash push -m "WIP: refactoring auth module"
# Apply specific stash without removing it
git stash apply stash@{2}
# Cherry-pick a commit from another branch
git cherry-pick abc1234
# Cherry-pick without committing (stage changes only)
git cherry-pick --no-commit abc1234
# Find which commit introduced a bug (binary search)
git bisect start
git bisect bad HEAD
git bisect good v1.0.0
# Git checks out middle commit — test it, then:
git bisect good # or git bisect bad
# Repeat until the guilty commit is found
git bisect reset
# Recover a deleted branch (within ~30 days)
git reflog
git checkout -b recovered-branch abc1234
# See what changed between two branches
git log main..feature --oneline
git diff main...feature --stat
Interactive Rebase Recipes
# Squash last 4 commits into one
git rebase -i HEAD~4
# In editor, change 'pick' to 'squash' (or 's') for commits 2-4:
# pick abc1234 Add user model
# squash def5678 Fix typo in user model
# squash 111aaaa Add validation
# squash 222bbbb Update tests
# Reorder commits
git rebase -i HEAD~3
# Simply rearrange the lines in the editor
# Edit a commit message 5 commits back
git rebase -i HEAD~5
# Change 'pick' to 'reword' (or 'r') on the target commit
# Split a commit into two
git rebase -i HEAD~3
# Change 'pick' to 'edit' on the target commit
git reset HEAD~1
git add file1.py && git commit -m "Part 1: add model"
git add file2.py && git commit -m "Part 2: add tests"
git rebase --continue
Git Hooks — Pre-commit Example
#!/bin/sh
# .git/hooks/pre-commit — runs before every commit
# Prevent committing to main directly
branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$branch" = "main" ]; then
echo "ERROR: Direct commits to main are not allowed."
echo "Create a feature branch: git checkout -b feature/your-feature"
exit 1
fi
# Check for debug statements
if git diff --cached --name-only | xargs grep -l "debugger\|console\.log\|import pdb" 2>/dev/null; then
echo "ERROR: Debug statements found in staged files."
exit 1
fi
# Run linter on staged Python files
STAGED_PY=$(git diff --cached --name-only --diff-filter=ACM | grep '\.py$')
if [ -n "$STAGED_PY" ]; then
python -m ruff check $STAGED_PY || exit 1
fi
exit 0
Quick Reference Table
| Command | What It Does | Safe on Shared Branch? |
|---|---|---|
git merge feature |
Merge with merge commit | ✅ Yes |
git rebase main |
Replay commits on top of main | ❌ Local only |
git reset --soft HEAD~1 |
Undo commit, keep staged | ❌ Local only |
git reset --hard HEAD~1 |
Undo commit, discard all | ❌ DANGEROUS |
git revert abc123 |
Create inverse commit | ✅ Yes |
git cherry-pick abc123 |
Copy commit to current branch | ✅ Yes |
git stash |
Temporarily shelve changes | ✅ Local operation |
git reflog |
View all HEAD movements | ✅ Read-only |
git bisect |
Binary search for bad commit | ✅ Read-only |
git worktree add |
Multiple working directories | ✅ Yes |
Comparison: Branching Strategies
| Aspect | GitFlow | GitHub Flow | Trunk-Based |
|---|---|---|---|
| Branches | main, develop, feature, release, hotfix | main + feature | main + short-lived feature |
| Complexity | High | Low | Low |
| Release Style | Scheduled releases | Continuous deploy | Continuous deploy |
| Best For | Versioned software, mobile apps | SaaS, web apps | High-velocity teams |
| Branch Lifetime | Days to weeks | Hours to days | Hours (< 1 day ideal) |
| CI/CD Fit | Moderate (complex pipelines) | Excellent | Excellent |
| Team Size | Any | Small-medium | Any (with feature flags) |
Usage Tips
- Pick a branching strategy page that matches your team and stick with it — consistency matters more than which one you choose.
-
Memorize the recovery commands —
git refloghas saved more developers than any other command. - Set up the git hooks from the examples — they catch mistakes before they become PR review comments.
-
Copy the
.gitconfigaliases — the pack includes 30+ aliases that cut your typing in half. - Use the merge vs rebase decision tree until it becomes instinct — it prevents the most common team workflow arguments.
This is 1 of 11 resources in the Cheatsheet Reference Pro toolkit. Get the complete [Git Commands & Workflows Guide] with all files, templates, and documentation for $12.
Or grab the entire Cheatsheet Reference Pro bundle (11 products) for $79 — save 30%.
Top comments (0)