Git Notes

Git Cheat Sheet <commit> can be any Git reference that points to a commit Local git config: .git/config (See all possible config options man git-config) Global git config: ~/.gitconfig Git ignore file : .gitignore Local ignore rules (not committed): .git/info/exclude # Start a new repo $ git init # clone an existing repo $ git clone <url> # Add untracked file or unstaged changes $ git add <file> # Add all untracked files and unstaged changes $ git add . ### Choose which parts of a file to stage $ git add -p # Delete file $ git rm <file> # Tell Git to forget about a file without deleting it $ git rm --cached <file> # Unstage one file git reset <file> # Unstage everything git reset # Check what you added git status # Make a commit (and open text editor to write message) git commit # Make a commit git commit -m 'message' # Commit all unstaged changes git commit -am 'message' # Make an empty commit for specific purpose git commit --allow-empty -m 'message' # Switch branches $ git switch <name> $ git checkout <name> # Create a new branch from the current branch $ git switch -c <new-branch> $ git checkout -b <new-branch> # Create a new branch from another local branch $ git switch -c <new-branch> <base-branch> # prefer $ git checkout -b <new-branch> <base-branch> # Create a new branch from a remote branch $ git switch -c <new-branch> origin/<remote-branch> # prefer $ git checkout -b <new-branch> origin/<remote-branch> # List branches $ git branch $ git branch -r # remote branches # Delete a branch $ git branch -d <name> $ git branch -D <name> # Force # Diff all staged and unstaged changes $ git diff HEAD # Diff just staged changes $ git diff --staged # Diff just unstaged changes $ git diff # Save to file $ git diff >> file # Compare two refs and list changed files git diff --name-only <branch> <commit> > files.txt # Show diff between a commit and its parent git show <commit> # Diff two commits git diff <commit> <commit> # Diff one file since a commit git diff <commit> <file> # Show a summary of a diff git diff <commit> --stat git show <commit> --stat # Discard unstaged changes in one file git restore <file> git checkout -- <file> # Discard all changes (staged and unstaged) in one file git restore --staged --worktree <file> git checkout HEAD -- <file> # Delete all staged and unstaged changes git reset --hard # Force Delete untracked files/director git clean -fd # 'Stash' all staged and unstaged changes git stash # "Undo" the most recent commit git reset HEAD^ # Squash the last 5 commits into one git rebase -i HEAD~6 # Open the log history git reflog git reflog BRANCHNAME # Move current branch back to <commit> git reset --hard <commit> # Recreate the branch using hash git checkout -b <new-branch> <commit> # Change a commit message / add a file git commit --amend # Show commit history git log main # Show compact commit history git log --oneline main # Show commit history as a branch graph git log --graph main # Show a compact graph of all branches git log --oneline --graph --all --decorate # Show every commit that modified a file git log <file> # Show every commit that modified a file, including before it was renamed git log --follow <file> # Find every commit that added or removed some text git log -G "<text>" # Show who last changed each line of a file git blame <file> # Cherry pick to copy one commit onto the current branch git cherry-pick <commit> # Replace the current version of a file with the version from another commit git restore --source <commit> <file> # Add a Remote git remote add <name> <url> # Push the main branch to the remote origin git push origin main # Push the current branch to its remote "tracking branch" git push # Push a branch that you've never pushed before git push -u origin <name> # Force push git push --force-with-lease # the remote has not changed git push --force # Create a tag $ git tag <tag> $ git tag -a <tag> -m "<des>" # Push tags $ git push origin <tag> $ git push --tags # Fetch changes git fetch origin main # Fetch changes and then rebase your current branch git pull --rebase # Set a config option git config user.name <user_name> git config user.email <user_email> # Set option globally git config --global ... # Mark a repository as safe (useful with Docker, WSL, shared folders, etc.) $ git config --global --add safe.directory <path> # Initialize and update submodules git submodule update --init # Run a single Git command without SSL certificate verification git -c http.sslVerify=false <git-command> # Set upstream branch git branch --set-upstream-to=origin/<branch_name> # Copy a file from another branch without switching branches git checkout <branch> -- <file> Useful VSCode Extensions Git Graph Git History Useful Eclipse Plugins EGit TBD

May 30, 2026 · 4 min · Phong Nguyen