Cheatsheet: Git
Created: | Updated:
This cheatsheet assumes that you're already familiar with Git concepts and know the usual init, pull, add, commit, push flow. It aims to document commands and flags that I tend to use but forget when I haven't used them in a while.
Branching
List branches
git branchCreate branch
git branch <branch>Switch to branch
git switch <branch>Create branch then switch to it
git switch --create <branch>Or shorthand:
git switch -c <branch>Rename current branch
git switch --move <new-name>Or shorthand:
git switch -m <new-name>Delete branch
git branch --delete <branch>Or shorthand:
git branch -d <branch>Delete branch WITHOUT pushing it upstream
git branch --delete --force <branch>Or shorthand:
git branch -D <branch>Stashing
Stash changes
git stashOr to add a message to remember the stash by:
git stash --message <message>Or shorthand:
git stash -m <message>List stashes
git stash listShow changes in stash
git stash show [<index>]Apply stash to current working tree
git stash apply [<index>]Apply stash to current working tree THEN remove it
git stash pop [<index>]Remove stash
git stash drop [<index>]Remove all stashes
git stash clearStaging
Stage part of a file
git add --patch <file>Or shorthand:
git add -p <file>Note: y means stage this hunk. n means don't stage this hunk. s means split this hunk (not always possible). e means manually edit this hunk to add the specific lines you want to add (done when hunk is too big and s is not possible).
Committing
Undo latest commit
git reset HEAD~Or to keep uncommitted changes staged:
git reset --soft HEAD~Or to discard ALL uncommitted changes:
git reset --hard HEAD~Note: You can lose a lot of work when using --hard, so only use it if you're sure you want to nuke your working tree (yes, you can use reflog, but still).
Change latest commit message
git commit --amendNote: There should be no staged changes or else those will be added to the latest commit.
Change previous commit messages
git rebase --interactive <hash>~Or shorthand:
git rebase -i <hash>~Then, change pick to reword or r on the commits whose message you want to change.
Add changes to latest commit
Stage new changes, then:
git commit --amendOr to NOT change the commit message:
git commit --amend --no-editChange previous commits
git rebase --interactive <hash>~Or shorthand:
git rebase -i <hash>~Then, change pick to edit or e on the commits you want to change. Once you're done with your changes, stage and commit them:
git commit --amendOr to NOT change the commit message:
git commit --amend --no-editThen, move on to the next commit to change:
git rebase --continueOr to discard the changes you've done so far and exit the interactive rebase:
git rebase --abortRebasing
Fix rebase conflicts
When conflicts occur from a git rebase or a git pull --rebase. Fix the files with conflicts, stage them, then run:
git rebase --continuePushing
Push to a remote branch with a different name
git push [<repository>] <local-branch>:<remote-branch>