📖 Guide

Git Commands Cheat Sheet — Complete Reference

Every Git command you need in this cheat sheet, searchable and organized. From basic commits to advanced rebasing.

187 commands across 14 categories

Setup & Configuration

CommandDescription
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 checkout
e.g. git co main
Create a command alias

Basic Workflow

CommandDescription
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 changesTry the Diff Checker →
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

CommandDescription
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

CommandDescription
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

CommandDescription
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

CommandDescription
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

CommandDescription
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

CommandDescription
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 bisect skip
Skip the current commit when it can't be tested (e.g. doesn't build)
git bisect run <script>
Automate bisection — script must exit 0 for good, 1-127 for bad, 125 to skip
git bisect log
Show every bisection step performed so far
git bisect replay <logfile>
Restore a bisect session from a previously saved log
git bisect visualize
View remaining suspect commits in gitk (or git log if no GUI)
git reflog
Show history of HEAD movements (recover lost commits)
git blame -M <file>
Detect lines moved or copied within the same file, attributing them to their original commit
git blame -C <file>
Detect lines moved or copied from other files changed in the same commit (stack -C -C or -C -C -C to widen the search)
git blame -w <file>
Ignore whitespace-only changes when attributing lines
git log -S"<string>"
e.g. git log -S"frotz(nitfol"
Find commits that added or removed an exact occurrence of a string (pickaxe search)
git log -G"<regex>"
Find commits whose diff contains an added/removed line matching a regexTry the Regex Tester →
git log -S"<string>" --pickaxe-regex
Treat the -S search string as an extended POSIX regex instead of a literal string

Tagging

CommandDescription
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

CommandDescription
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 worktree add -b <branch> <path> [<commit-ish>]
Create a worktree AND a new branch starting at <commit-ish> (defaults to HEAD) in one step
git worktree prune
Clean up worktree metadata after a working tree was removed manually instead of via 'worktree remove'
git sparse-checkout init
Enable sparse checkout (partial repo)
git sparse-checkout set <dir>
Only check out specific directories
git sparse-checkout add <dir>
Add more directories to an existing sparse checkout without replacing it — cone mode (directory-based patterns) has been the default since Git 2.37
git sparse-checkout list
List the directories/patterns currently included in the sparse checkout
git sparse-checkout disable
Disable sparse checkout and restore all tracked files to the working directory
git submodule status
Show the checked-out commit SHA and sync status for each submodule
git submodule sync
Update submodules' recorded remote URLs to match .gitmodules
git submodule update --remote
Update submodules to the latest commit on their tracked remote branch, instead of the superproject's recorded SHA
git clone --recurse-submodules <url>
Clone a repository and initialize/checkout its submodules in one step
git archive --format=zip HEAD > repo.zip
Export repo as a zip archive
git gc
Run garbage collection to optimize repo
git maintenance start
Enable scheduled background maintenance (commit-graph, gc, prefetch, and more) for this repo
git maintenance run --task=gc
Run one specific maintenance task on demand instead of the full scheduled set
git filter-branch
Rewrites history by running a filter over every commit — the official docs call its use "not recommended" due to safety and performance pitfalls; use git filter-repo (a separate, official-recommended tool) instead
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

Reflog & Recovery

CommandDescription
git reflog show <ref>
e.g. git reflog show main
Show the reflog for a specific ref instead of HEAD — defaults to HEAD when omitted
git checkout -b recovered-branch HEAD@{5}
Recover a commit that a branch move/reset left behind, by branching from a reflog entry
git reset --hard HEAD@{1}
Undo a bad reset/rebase/commit by resetting back to where HEAD pointed one move ago, per the reflog ⚠️
git fsck --unreachable
List objects that exist but aren't reachable from any ref — useful after a reflog entry has expired
git fsck --lost-found
Write dangling commits/blobs into .git/lost-found/ so they can be inspected and recovered

Signing Commits & Tags

CommandDescription
git commit -S
Sign a commit with the configured key (GPG, X.509, or SSH depending on gpg.format)
git config --global commit.gpgsign true
Sign every commit by default without passing -S each time
git tag -s <name> -m "message"
Create a cryptographically signed annotated tag
git tag -v <name>
Verify the cryptographic signature of a tag
git log --show-signature
Show each commit's GPG signature verification status in the log
git config --global gpg.format ssh
Use an SSH key instead of GPG/X.509 for signing (Git 2.34+)
git config --global user.signingkey ~/.ssh/id_ed25519.pub
Set the SSH public key to sign with when gpg.format is ssh
git commit --no-gpg-sign
Skip signing for one commit, overriding commit.gpgsign / a prior --gpg-sign

Conflict Reuse (rerere)

CommandDescription
git config --global rerere.enabled true
Enable rerere — Git will record how you resolve a conflict and auto-replay that resolution if the same conflict recurs
git rerere status
List paths with conflicts whose resolution rerere will record
git rerere diff
Show the diff of the currently recorded conflict resolution
git rerere remaining
List conflicted paths rerere could not auto-resolve
git rerere forget <path>
Discard the recorded resolution for a path so rerere asks again next time
git rerere gc
Prune old recorded resolutions (unresolved conflicts older than 15 days, resolved ones older than 60, by default)

Resolving Merge Conflicts

CommandDescription
git diff --diff-filter=U
List only the currently unmerged (conflicted) files
git checkout --ours -- <file>
Resolve a conflict by keeping your side of a file (stage #2)
git checkout --theirs -- <file>
Resolve a conflict by keeping the other side of a file (stage #3) — gotcha: during a rebase these are swapped, so --ours means the branch being rebased onto
git log --merge -p <path>
Show the diffs from each side of an in-progress, unresolved merge for a path
git show :1:<file>
Show the common-ancestor version of a conflicted file
git show :2:<file>
Show 'our' version of a conflicted file
git show :3:<file>
Show 'their' version of a conflicted file
git mergetool
Launch a configured graphical merge tool to resolve conflicts interactively
git merge --continue
Conclude a merge after staging resolved files — equivalent to git commit, but checks a merge is actually in progress first

More Guides

📝
Vim Commands
Complete Vim/Vi command reference cheat sheet — modes, motions, editing, search and replace, macros, registers, marks, and window management.
🐳
Docker Commands
Complete Docker & Docker Compose command reference cheat sheet — containers, images, volumes, networks, registry auth, buildx multi-platform builds, & cleanup.
🔤
Regex Reference
Complete regular expression reference cheat sheet — character classes, anchors, quantifiers, groups, lookaheads, flags, and JavaScript string methods.
🐧
Linux Commands
Complete Linux/Bash command reference cheat sheet — file management, text processing, networking, system admin, and shell scripting.
☸️
Kubernetes Commands
Complete Kubernetes & kubectl command reference cheat sheet — pods, deployments, services, secrets, namespaces, scaling, RBAC, networking, and Helm charts.
🐍
Python Reference
Complete Python reference — syntax, data structures, string methods, control flow, classes, error handling, file I/O, comprehensions, and built-ins.
🗃️
SQL Reference
Complete SQL reference cheat sheet — queries, joins, aggregation, subqueries, indexes, window functions, string and date functions, and database management.
🌐
Nginx Reference
Complete Nginx configuration reference — server blocks, locations, proxying, SSL, load balancing, caching, security headers, and rate limiting.
🔐
SSH Commands
Complete SSH reference — connections, key management, tunneling, config, SCP/SFTP, agent forwarding, security hardening, and troubleshooting.
👷
Jenkins Reference
Complete Jenkins reference — pipeline syntax, Jenkinsfile, plugins, CLI, agents, shared libraries, credentials, and CI/CD patterns.
📨
HTTP Headers Reference
Complete HTTP headers reference — request headers, response headers, caching, security, CORS, and content negotiation. Searchable, with examples.
🐘
PostgreSQL Reference
Comprehensive PostgreSQL reference — from connection basics to advanced features like JSONB, full-text search, window functions, and performance tuning.
⚡
Async Patterns Reference
Multi-language async/concurrency patterns — JavaScript, Python, Go, Rust, Java, plus retry, rate limiting, and circuit breaker patterns.
📡
Protobuf & gRPC Reference
Comprehensive reference for Protocol Buffers (proto3) and gRPC — message definitions, services, streaming, and common patterns.
📚
JS Array Methods
Complete JavaScript Array methods reference — creating, searching, transforming, sorting, iterating, and common patterns. Searchable, with examples.
🌊
Tailwind CSS Reference
Complete Tailwind CSS reference — layout, spacing, typography, colors, responsive design, states, and common patterns. Searchable, with examples.
◈
GraphQL Reference
Complete GraphQL reference — schema definition, types, queries, mutations, directives, fragments, and common patterns. Searchable, with examples.
💻
VS Code Shortcuts
Complete VS Code keyboard shortcuts cheat sheet — editing, navigation, search, multi-cursor, terminal, debug, and more. Searchable, with Cmd/Ctrl notation.
🔲
CSS Grid Reference
Complete CSS Grid reference — container properties, item placement, grid functions, and common layout patterns. Searchable, with examples.
📦
CSS Flexbox Reference
Complete CSS Flexbox reference — container properties, item properties, and common layout patterns. Searchable, with examples.
⚛️
React Hooks Reference
Complete React Hooks reference — useState, useEffect, useContext, custom hooks, and common patterns. Searchable, with examples.
🔷
TypeScript Reference
Complete TypeScript reference — types, interfaces, generics, utility types, and advanced patterns. Searchable, with examples.
☁️
AWS CLI Reference
Complete AWS CLI reference — EC2, S3, IAM, Lambda, ECS, RDS, CloudFormation, CloudWatch, SQS/SNS, Route 53, and common operations.
🐹
Go Reference
Complete Go (Golang) reference — syntax, types, structs, interfaces, goroutines, channels, error handling, testing, and the standard library.
💠
PowerShell Reference
Complete PowerShell reference — cmdlets, pipelines, scripting, file operations, remote management, and Active Directory.
💾
Redis Commands
Complete Redis command reference — strings, hashes, lists, sets, sorted sets, pub/sub, transactions, and server management.
🏗️
Terraform Commands
Complete Terraform reference — init, plan, apply, state management, modules, workspaces, providers, backend configuration, and HCL syntax.
⚙️
Ansible Commands
Complete Ansible reference — playbooks, modules, inventory, roles, vault, Galaxy, handlers, conditionals, loops, and ad-hoc commands.
🪶
Apache
Complete Apache HTTP Server cheat sheet — virtual hosts, modules, rewrite rules, and SSL, plus access control, logging, and performance.
🔤
ASCII Table
Complete ASCII character reference with decimal, hexadecimal, and character values, plus control codes and common escape sequences.
🔧
Awk
Powerful text processing language for pattern scanning, data extraction, arrays, control flow, and report generation with built-in variables.
💻
Bash
Complete Bash reference cheat sheet — variables, strings, arrays, conditionals, loops, functions, file tests, I/O redirection, process management, and more.
⚙️
C
Complete C programming cheat sheet covering syntax, pointers, memory management, structs, file I/O, preprocessor, and standard library.
🔐
Chmod
Linux file permission commands and patterns for chmod, covering numeric and symbolic modes, recursive changes, and SUID/SGID/sticky bits.
🔧
Chrome DevTools
Essential Chrome DevTools shortcuts, commands, and workflows for web developers — covering Network, Performance, and Application panels.
🔷
C++
Complete C++ cheat sheet covering STL containers, OOP, templates, smart pointers, iterators, lambda expressions, and modern C++ features.
⏰
Cron
Cron scheduling reference covering syntax, special strings, field values, crontab management, environment variables, and logging.
🎨
CSS
Complete CSS reference cheat sheet — selectors, box model, positioning, typography, animations, media queries, custom properties, and more.
🌐
Curl
Curl command-line reference for HTTP requests, headers, authentication, cookies, proxies, file transfers, SSL/TLS, debugging, and API patterns.
🎯
Dart
Dart language cheat sheet covering syntax, types, OOP, null safety, and async patterns, plus collections, error handling, and classes.
🐳
Docker Compose
Docker Compose reference covering CLI commands, service configuration, networking, volumes, health checks, profiles, and build options.
💧
Drizzle ORM
Complete Drizzle ORM reference for schema definition, column types, queries, filters, joins, relations, migrations, indexes, and patterns.
⚡
Emmet
Quick reference for Emmet abbreviations for lightning-fast HTML and CSS coding, covering nesting, multiplication, numbering, and grouping.
🔍
Find
Search for files and directories in a directory hierarchy with powerful filtering by name, size, time, permissions, type, and actions.
🔥
Firebase
Firebase reference covering Authentication, Firestore, Realtime Database, Cloud Functions, Hosting, Storage, and security rules.
🤖
GitHub Actions
Complete GitHub Actions cheat sheet — workflows, triggers, jobs, and CI/CD patterns, plus matrix strategies, caching, and artifacts.
🔎
Grep
Search text using patterns. Filter lines from files, command output, or streams with regular expressions, context options, and file filtering.
📄
HTML
Complete HTML reference — document structure, text content, links, forms, tables, media, semantic elements, meta tags, attributes, and accessibility.
📡
HTTP Status Codes
Complete reference of all standard HTTP response status codes across 1xx-5xx classes, with descriptions, examples, and common usage patterns.
☕
Java
Complete Java reference — data types, strings, collections, OOP, interfaces, exceptions, file I/O, streams, lambdas, and more.
🟨
JavaScript
Complete JavaScript reference — variables, types, operators, strings, arrays, objects, functions, async, DOM, ES6+, and more.
💲
jQuery
Quick reference for jQuery selectors, DOM manipulation, events, AJAX, and more, including animation effects, traversing, and plugins.
🔺
Laravel
Laravel PHP framework cheat sheet for routing, Eloquent, Blade, Artisan, and more, plus middleware, validation, and authentication.
📐
LaTeX
Quick reference for LaTeX document structure, math mode, formatting, and common packages, plus figures, tables, and citation styles.
📝
Markdown
Complete Markdown syntax reference for headings, formatting, links, tables, code blocks, task lists, footnotes, and extensions.
🍃
MongoDB
MongoDB reference covering CRUD operations, aggregation, indexes, and administration, plus replica sets, users, roles, and query operators.
🐬
MySQL
Complete MySQL cheat sheet covering queries, joins, indexes, transactions, data types, user permissions, and database administration.
▲
Next.js
Next.js App Router reference covering routing, data fetching, server components, API routes, middleware, and deployment configuration.
🟩
Node.js
Comprehensive Node.js runtime reference covering modules, file system, HTTP, streams, events, child processes, and npm scripts.
📦
npm
Complete npm cheat sheet — package management, scripts, publishing, and configuration, plus workspaces, security audits, and npx.
🔢
NumPy
Essential NumPy commands for array manipulation and numerical computing in Python, covering reshaping, broadcasting, and linear algebra.
🐼
Pandas
Pandas cheat sheet for data manipulation, analysis, and transformation in Python, covering DataFrames, grouping, merging, and date/time.
🐘
PHP
Complete PHP cheat sheet covering syntax, OOP, arrays, PDO, and modern PHP 8.x features, plus file I/O, superglobals, and error handling.
🔄
PM2
Production process manager for Node.js applications with cluster mode, monitoring, log management, startup scripts, and zero-downtime reloads.
💎
Prisma
Complete Prisma ORM cheat sheet — schema, queries, migrations, and CLI, plus relations, aggregations, filtering, and seeding patterns.
🦀
Rust
Comprehensive Rust language cheat sheet covering ownership, traits, pattern matching, structs, enums, error handling, closures, and concurrency.
💅
Sass
Complete Sass/SCSS cheat sheet covering variables, mixins, functions, nesting, extends, maps, and the modern module system.
📺
Screen
GNU Screen terminal multiplexer for persistent sessions, window and split-region management, key bindings, copy mode, and remote work.
✂️
Sed
Stream editor for filtering and transforming text, line by line — substitution, address ranges, hold space, branching, and flags.
⚡
Supabase
Complete Supabase cheat sheet — auth, database, realtime, storage, and edge functions, plus row level security and migrations.
🖥️
Tmux
Terminal multiplexer cheat sheet for managing multiple sessions, windows, and panes from a single terminal, with copy mode and status bar configuration.
📦
TOML
Quick reference for TOML configuration file syntax, types, tables, and common patterns, including arrays of tables and inline tables.
▲
Vercel CLI
Complete Vercel CLI reference for deployment, project management, domains, environment variables, secrets, logs, edge functions, and configuration.
⚡
Vite
Next-generation frontend build tool with instant HMR, native ES modules, plugins, environment variables, library mode, and Rollup-based builds.
📦
Webpack
Module bundler for JavaScript applications — entry/output config, loaders, plugins, code splitting, module resolution, and optimization.
🎯
XPath
Quick reference for XPath expressions, axes, predicates, string functions, node tests, and operators for XML/HTML querying.
📋
YAML
YAML syntax reference covering scalars, collections, anchors, aliases, multi-line strings, nested structures, and common patterns.

📖 Free, searchable command reference. Bookmark this page for quick access.