Git Cheatsheet
Configuration
Use this Git reference while you build software engineering projects, review code, or refresh the syntax you reach for most.
Config Levels
Git configuration is read from three levels, each overriding the previous:
| Level | Flag | File Location | Scope |
|---|---|---|---|
| System | --system | /etc/gitconfig | All users on the machine |
| Global | --global | ~/.gitconfig or ~/.config/git/config | Current OS user |
| Local | --local | .git/config | Current repository (default) |
| Worktree | --worktree | .git/config.worktree | Current worktree |
git config --global user.name "Alice" # Set at global level git config --local core.autocrlf false # Set at repo level git config --system core.editor vim # Set at system level (needs sudo)
Reading Config Values
git config user.name # Read a single key git config --list # Show all effective settings git config --list --show-origin # Also show which file each came from git config --list --show-scope # Show scope (system/global/local) git config --get user.email # Get specific key (same as above) git config --get-all alias.co # Get all values for a multi-value key git config --edit # Open current level config in editor git config --global --edit # Open global config in editor
Essential Identity Settings
git config --global user.name "Alice Smith" git config --global user.email "alice@example.com"
Core Settings
git config --global core.editor "code --wait" # VS Code git config --global core.editor "vim" # Vim git config --global core.editor "nano" # Nano git config --global core.autocrlf true # Windows: convert LF→CRLF on checkout git config --global core.autocrlf input # macOS/Linux: convert CRLF→LF on commit git config --global core.autocrlf false # No conversion git config --global core.ignorecase false # Case-sensitive filenames git config --global core.whitespace trailing-space,space-before-tab git config --global core.pager "less -FX" # Pager for log/diff output git config --global core.fileMode false # Ignore executable bit changes
Diff and Merge Tool Settings
git config --global diff.tool vscode git config --global difftool.vscode.cmd "code --wait --diff \$LOCAL \$REMOTE" git config --global merge.tool vscode git config --global mergetool.vscode.cmd "code --wait \$MERGED" git config --global diff.colorMoved zebra # Color moved lines differently git config --global merge.conflictstyle diff3 # Show base in conflict markers
Alias Settings
git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.lg "log --oneline --graph --decorate --all" git config --global alias.undo "reset HEAD~1 --mixed" git config --global alias.unstage "restore --staged" git config --global alias.last "log -1 HEAD" git config --global alias.aliases "config --get-regexp ^alias\."
Use aliases:
git st # runs: git status git lg # runs: git log --oneline --graph --decorate --all
Push and Pull Settings
git config --global push.default current # Push to upstream branch of same name git config --global push.default simple # (Git ≥2.0 default) same as current but safer git config --global push.autoSetupRemote true # Auto set --set-upstream on first push git config --global pull.rebase true # Always rebase instead of merge on pull git config --global pull.ff only # Only fast-forward; fail otherwise git config --global fetch.prune true # Auto-prune deleted remote branches
Credential Settings
git config --global credential.helper cache # In-memory cache (Linux) git config --global credential.helper "cache --timeout=3600" # Cache for 1 hour git config --global credential.helper store # Plain-text file (~/.git-credentials) git config --global credential.helper osxkeychain # macOS Keychain git config --global credential.helper manager # Git Credential Manager (Windows/cross-platform)
Color Settings
git config --global color.ui auto # Colorize output when in terminal (default) git config --global color.diff.old "red bold" git config --global color.diff.new "green bold" git config --global color.status.added green git config --global color.status.modified yellow git config --global color.status.untracked cyan
Unset and Remove Settings
git config --global --unset user.email # Remove a key git config --global --unset-all alias.co # Remove all values for a key git config --global --remove-section alias # Remove an entire section
Conditional Includes
Useful for separating work vs. personal configs:
# In ~/.gitconfig [includeIf "gitdir:~/work/"] path = ~/.gitconfig-work [includeIf "gitdir:~/personal/"] path = ~/.gitconfig-personal
# ~/.gitconfig-work
[user]
email = alice@company.com
signingkey = WORKKEY123GPG Signing
git config --global user.signingkey <GPG_KEY_ID> git config --global commit.gpgsign true # Sign all commits by default git config --global tag.gpgsign true # Sign all tags by default git config --global gpg.program gpg2