Git Commands Cheat Sheet
Essential Git commands for daily development.
Setup
Configure Git
First-time setup (run once on new machine):
# Set your identity
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# Set default branch name
git config --global init.defaultBranch main
View Configuration
# List all settings
git config --list
# Check specific setting
git config user.name
# Edit config file directly
git config --global --edit
Creating Repositories
Initialize Repository
git init
git init myproject
Clone Repository
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git mydir
git clone --depth 1 https://github.com/user/repo.git # Shallow clone
Basic Workflow
Check Status
# Full status (recommended for beginners)
git status
# Short format (quick overview)
git status -s
Stage Changes
# Stage single file
git add file.txt
# Stage all changes in current directory
git add .
# Stage all JavaScript files
git add *.js
# Stage all changes (entire repository)
git add -A
# Interactive staging (choose what to stage)
git add -p
Commit Changes
# Basic commit with message
git commit -m "Add feature"
# Stage and commit tracked files in one step
git commit -am "Update files"
# Modify the last commit (add more changes)
git commit --amend
# Amend without changing commit message
git commit --amend --no-edit
View History
git log
git log --oneline
git log --graph --oneline --all
git log -5 # Last 5 commits
git log --author="John"
git log --since="2 weeks ago"
git log --grep="fix"
Branches
Create Branch
git branch feature
git checkout -b feature # Create and switch
git switch -c feature # New syntax
Switch Branch
git checkout main
git switch main # New syntax
List Branches
git branch
git branch -a # All branches (local + remote)
git branch -r # Remote branches
Delete Branch
git branch -d feature # Safe delete
git branch -D feature # Force delete
git push origin --delete feature # Delete remote
Rename Branch
git branch -m new-name
git branch -m old-name new-name
Merging
Merge Branch
git merge feature
git merge feature --no-ff # Create merge commit
git merge --squash feature # Squash commits
Abort Merge
git merge --abort
Rebasing
Rebase Branch
git rebase main
git rebase -i HEAD~3 # Interactive rebase last 3 commits
Continue/Abort Rebase
git rebase --continue
git rebase --abort
Remote Repositories
Add Remote
git remote add origin https://github.com/user/repo.git
git remote -v # View remotes
Fetch & Pull
git fetch origin
git fetch --all
git pull origin main
git pull --rebase origin main
Push Changes
git push origin main
git push -u origin feature # Set upstream
git push --force-with-lease # Safer force push
git push --all # Push all branches
Undoing Changes
Unstage Files
git reset file.txt
git reset # Unstage all
Discard Changes
git checkout -- file.txt
git restore file.txt # New syntax
git restore . # All files
Undo Commits
git reset --soft HEAD~1 # Keep changes staged
git reset --mixed HEAD~1 # Keep changes unstaged
git reset --hard HEAD~1 # Discard changes
Revert Commit
git revert abc123
git revert HEAD
git revert --no-commit HEAD~3..HEAD # Revert range
Stashing
Save Changes
git stash
git stash save "WIP: feature"
git stash -u # Include untracked files
List Stashes
git stash list
Apply Stash
git stash pop # Apply and remove
git stash apply # Apply and keep
git stash apply stash@{1} # Apply specific
Delete Stash
git stash drop stash@{0}
git stash clear # Delete all
Diff
View Changes
git diff
git diff --staged # Staged changes
git diff HEAD # All changes
git diff main..feature # Between branches
git diff abc123..def456 # Between commits
git diff --stat # Summary
Tags
Create Tag
git tag v1.0.0
git tag -a v1.0.0 -m "Version 1.0.0"
git tag v1.0.0 abc123 # Tag specific commit
List Tags
git tag
git tag -l "v1.*"
Push Tags
git push origin v1.0.0
git push origin --tags # Push all
Delete Tag
git tag -d v1.0.0
git push origin --delete v1.0.0
Advanced
Cherry Pick
git cherry-pick abc123
git cherry-pick abc123..def456
Clean Untracked
git clean -n # Dry run
git clean -f # Remove files
git clean -fd # Remove files and directories
Show Commit
git show abc123
git show HEAD
git show HEAD~3
Blame
git blame file.txt
git blame -L 10,20 file.txt # Specific lines
Bisect
git bisect start
git bisect bad
git bisect good abc123
# Test, then mark:
git bisect good # or bad
git bisect reset
Best Practices
Commit Messages
feat: add user authentication
fix: resolve login bug
docs: update README
style: format code
refactor: simplify validation logic
test: add unit tests for auth
chore: update dependencies
Branch Naming
feature/user-auth
bugfix/login-error
hotfix/security-patch
release/v1.2.0
Workflow Tips
Aliases
Add to.gitconfig:
[alias]
st = status
co = checkout
br = branch
ci = commit
lg = log --oneline --graph --all
unstage = reset HEAD --
last = log -1 HEAD
amend = commit --amend --no-edit