📖 Guide
Git Commands Cheat Sheet — Complete Reference
Every Git command you need, searchable and organized. From basic commits to advanced rebasing.
136 commands across 10 categories
Setup & ConfigurationBasic WorkflowBranchingRemote RepositoriesStashingUndoing ChangesRewriting HistoryInspection & ComparisonTaggingAdvanced
Setup & Configuration
| Command | Description |
|---|---|
git init | Initialize a new Git repository in the current directory |
git init <dir>e.g. git init my-project | Create a new repository in the specified directory |
git clone <url>e.g. git clone https://github.com/user/repo.git | Clone a remote repository |
git clone --depth 1 <url> | Shallow clone (latest commit only) — faster for large repos |
git clone --branch <branch> <url>e.g. git clone --branch develop https://github.com/user/repo.git | Clone a specific branch |
git config --global user.name "Name" | Set your global Git username |
git config --global user.email "email" | Set your global Git email |
git config --global core.editor vim | Set default editor for commit messages |
git config --global init.defaultBranch main | Set default branch name for new repos |
git config --list | List all Git configuration settings |
git config --global alias.co checkoute.g. git co main | Create a command alias |
Basic Workflow
| Command | Description |
|---|---|
git status | Show working tree status — modified, staged, untracked files |
git status -s | Short-format status output |
git add <file>e.g. git add index.js | Stage a file for commit |
git add . | Stage all changes in the current directory |
git add -p | Interactively stage hunks — review each change before staging |
git add -A | Stage all changes including deletions |
git commit -m "message" | Commit staged changes with a message |
git commit -am "message" | Stage all tracked files and commit in one step |
git commit --amend | Modify the last commit (message or content) |
git commit --amend --no-edit | Add staged changes to last commit without changing message |
git diff | Show unstaged changes |
git diff --staged | Show staged changes (ready to commit) |
git diff HEAD | Show all changes since last commit (staged + unstaged) |
git diff <branch1> <branch2>e.g. git diff main develop | Compare two branches |
git log | Show commit history |
git log --oneline | Compact commit history (one line per commit) |
git log --oneline --graph | Visualize branch history as ASCII graph |
git log -n 5 | Show last 5 commits |
git log --author="name" | Filter commits by author |
git log --since="2024-01-01" | Show commits after a date |
git log -p <file> | Show commit history with diffs for a specific file |
Branching
| Command | Description |
|---|---|
git branch | List local branches |
git branch -a | List all branches (local + remote) |
git branch -v | List branches with last commit info |
git branch <name>e.g. git branch feature/login | Create a new branch |
git branch -d <name>e.g. git branch -d feature/login | Delete a merged branch |
git branch -D <name> | Force delete a branch (even if unmerged) |
git branch -m <old> <new>e.g. git branch -m old-name new-name | Rename a branch |
git switch <branch>e.g. git switch develop | Switch to a branch (modern syntax) |
git switch -c <name>e.g. git switch -c feature/auth | Create and switch to a new branch |
git checkout <branch> | Switch to a branch (classic syntax) |
git checkout -b <name> | Create and switch to a new branch (classic) |
git merge <branch>e.g. git merge feature/login | Merge a branch into the current branch |
git merge --no-ff <branch> | Merge with a merge commit (no fast-forward) |
git merge --squash <branch> | Squash all commits from branch into one |
git merge --abort | Abort a merge in progress (conflicts) |
Remote Repositories
| Command | Description |
|---|---|
git remote -v | List remote repositories with URLs |
git remote add <name> <url>e.g. git remote add origin https://github.com/user/repo.git | Add a remote repository |
git remote remove <name> | Remove a remote |
git remote rename <old> <new> | Rename a remote |
git remote set-url <name> <url> | Change a remote's URL |
git fetch | Download remote changes without merging |
git fetch --all | Fetch from all remotes |
git fetch --prune | Fetch and remove stale remote-tracking branches |
git pull | Fetch and merge remote changes |
git pull --rebase | Fetch and rebase instead of merge (cleaner history) |
git push | Push commits to the remote |
git push -u origin <branch>e.g. git push -u origin feature/auth | Push and set upstream for a new branch |
git push --force-with-lease | Force push safely (fails if remote has new commits) |
git push origin --delete <branch> | Delete a remote branch |
git push --tags | Push all tags to remote |
Stashing
| Command | Description |
|---|---|
git stash | Stash working directory changes |
git stash push -m "message" | Stash with a descriptive message |
git stash push -p | Interactively stash specific hunks |
git stash list | List all stashes |
git stash show | Show stash diff summary |
git stash show -p | Show full stash diff |
git stash pop | Apply most recent stash and remove it |
git stash apply | Apply most recent stash (keep in stash list) |
git stash apply stash@{2} | Apply a specific stash |
git stash drop stash@{0} | Delete a specific stash |
git stash clear | Delete all stashes |
git stash branch <name>e.g. git stash branch fix-from-stash | Create a branch from a stash |
Undoing Changes
| Command | Description |
|---|---|
git restore <file>e.g. git restore index.js | Discard working directory changes |
git restore --staged <file> | Unstage a file (keep changes) |
git restore --source=HEAD~1 <file> | Restore file from a previous commit |
git reset HEAD <file> | Unstage a file (classic syntax) |
git reset --soft HEAD~1 | Undo last commit, keep changes staged |
git reset --mixed HEAD~1 | Undo last commit, keep changes unstaged (default) |
git reset --hard HEAD~1 | Undo last commit and discard all changes ⚠️ |
git reset --hard origin/main | Reset branch to match remote ⚠️ |
git revert <commit>e.g. git revert abc1234 | Create a new commit that undoes a previous commit |
git revert HEAD | Revert the last commit |
git revert --no-commit <commit> | Revert without auto-committing |
git clean -fd | Remove untracked files and directories ⚠️ |
git clean -fdn | Dry run — show what would be removed |
git checkout -- <file> | Discard changes (classic syntax) |
Rewriting History
| Command | Description |
|---|---|
git rebase <branch>e.g. git rebase main | Rebase current branch onto another |
git rebase -i HEAD~3 | Interactive rebase — edit, squash, reorder last 3 commits |
git rebase --abort | Abort a rebase in progress |
git rebase --continue | Continue rebase after resolving conflicts |
git rebase --skip | Skip the current commit during rebase |
git cherry-pick <commit>e.g. git cherry-pick abc1234 | Apply a specific commit to current branch |
git cherry-pick <a>..<b> | Cherry-pick a range of commits |
git cherry-pick --no-commit <commit> | Apply changes without committing |
git commit --fixup <commit> | Create a fixup commit for later autosquash |
git rebase -i --autosquash HEAD~5 | Auto-squash fixup commits during interactive rebase |
Inspection & Comparison
| Command | Description |
|---|---|
git show <commit>e.g. git show abc1234 | Show details and diff for a commit |
git show HEAD:<file> | Show file content at a specific commit |
git blame <file>e.g. git blame src/app.js | Show who last modified each line |
git blame -L 10,20 <file> | Blame specific line range |
git log --stat | Show commit history with file change stats |
git log --all --oneline --graph | Full visual branch history |
git shortlog -sn | Show commit count per author |
git diff --name-only | Show only changed filenames |
git diff --stat | Show change statistics |
git bisect start | Start binary search for a bug-introducing commit |
git bisect bad | Mark current commit as bad |
git bisect good <commit> | Mark a commit as good |
git bisect reset | End bisect session |
git reflog | Show history of HEAD movements (recover lost commits) |
Tagging
| Command | Description |
|---|---|
git tag | List all tags |
git tag <name>e.g. git tag v1.0.0 | Create a lightweight tag |
git tag -a <name> -m "message"e.g. git tag -a v1.0.0 -m "Release 1.0" | Create an annotated tag |
git tag -a <name> <commit> | Tag a specific commit |
git tag -d <name> | Delete a local tag |
git push origin <tag> | Push a specific tag to remote |
git push origin --tags | Push all tags to remote |
git push origin --delete <tag> | Delete a remote tag |
git describe --tags | Describe current commit relative to nearest tag |
Advanced
| Command | Description |
|---|---|
git submodule add <url> <path> | Add a submodule |
git submodule update --init --recursive | Initialize and update all submodules |
git submodule foreach git pull | Update all submodules to latest |
git worktree add <path> <branch> | Create a linked working tree for a branch |
git worktree list | List all working trees |
git worktree remove <path> | Remove a working tree |
git sparse-checkout init | Enable sparse checkout (partial repo) |
git sparse-checkout set <dir> | Only check out specific directories |
git archive --format=zip HEAD > repo.zip | Export repo as a zip archive |
git gc | Run garbage collection to optimize repo |
git fsck | Verify integrity of the repository |
git grep "pattern"e.g. git grep "TODO" | Search tracked files for a pattern |
git log --all -- <file> | Find all commits that touched a deleted file |
git rev-parse HEAD | Get the full SHA of current commit |
git rev-list --count HEAD | Count total commits in current branch |
📖 Free, searchable command reference. Bookmark this page for quick access.