Level 1 — Foundations · wrap-up
Cheat sheet & self-check
Every command from this section on one page.
Set up once
git config --global user.name "Your Name" | Name recorded in your commits |
git config --global user.email you@example.com | Email recorded in your commits |
git config --global init.defaultBranch main | New repositories start on main |
git config --global pull.rebase true | git pull rebases instead of creating merge commits |
git config --list --show-origin | Every setting and the file it comes from |
Look inside
git init / git clone <url> | Start a repository / copy an existing one |
git log --oneline --graph --all | The commit graph with every branch |
git cat-file -p HEAD | The raw commit object: tree, parent, author, message |
git cat-file -p HEAD^{tree} | The snapshot (tree) that commit points to |
git rev-parse HEAD | The full SHA of the current commit |
cat .git/HEAD | Where HEAD points (usually a branch) |
See changes
git status -sb | Short status with the current branch |
git diff | Unstaged changes |
git diff --staged | What the next commit will contain |
git diff main...feature | What a branch changed since it split from main |
Stage and commit
git add -p | Stage change by change (interactive hunks) |
git commit -m "fix(api): return 404 for unknown order" | Commit with a message |
git commit --amend | Fix the last commit (only if not pushed yet) |
git restore --staged <file> | Unstage a file |
Read history
git log --oneline -20 | Last 20 commits, one line each |
git log -p -- path/to/file | Every change to one file, with diffs |
git log -S "max_connections" | Commits that added or removed a string |
git blame -L 40,60 app.py | Who last changed lines 40–60, and in which commit |
git show <sha> | One commit: message and diff |
Branches
git switch -c feature/login | Create a branch and switch to it |
git switch main | Go back to main |
git branch -vv | Local branches with their upstream and last commit |
git branch -d feature/login | Delete a merged branch (-D forces) |
Combine
git merge --ff-only feature/login | Merge only if it's a fast-forward |
git merge --no-ff feature/login | Always create a merge commit |
git rebase main | Replay the current branch's commits on top of main |
git rebase -i HEAD~4 | Reorder, squash or reword the last 4 commits |
Conflicts
git status | Lists conflicted files |
git diff --name-only --diff-filter=U | Only the conflicted files |
git add <file> && git merge --continue | Mark resolved and finish a merge |
git rebase --continue / --abort | Continue or cancel a rebase |
git merge --abort | Cancel a merge and go back |