Cover for Git: Cheat Sheet (advanced)

Git: Cheat Sheet (advanced)

This article also exists in: Japanese , Chineese

If you find git confusing, I created this little cheat sheet! Please, note that I voluntarily skipped the basic commands like git commit, git pull/push… This cheat sheet is intended for advanced usage of git.

Git Cheat Sheet

🧭 Navigation - Go to the previous branch

Terminal window
git checkout -

🔍 Get the history

Terminal window
# Log in one line
git log --oneline
# Retrieve all commits by message
# Here all commit that contain 'homepage'
git log --all --grep='homepage'
# Retrieve all commit by author
git log --author="Maxence"

🙈Ooops #1: I reseted an unwanted commit. How to rollback?

Terminal window
# Get everything you did
git reflog
# then reset to the desired commit (i.e. HEAD@{4})
git reset HEAD@{4}
# ...or...
git reset --hard <commit-sha1>

For more detail about this command, I wrote another post: What’s happens when you ‘git commit’.

🤦‍♀️Ooops #2: I mixed-up with my local repo. How to clean it?

Terminal window
git fetch origin
git checkout master
git reset --hard origin/master
# You're now up-to-date with master!

🕵🏻‍♂️Difference between my branch and master

Terminal window
git diff

✔ Custom commits

Terminal window
# Edit last commit
git commit --amend -m "A better message"
# Add something to the last commit without writing message again
git add . && git commit --amend --no-edit
# empty commit - can be useful to re-trigger CI build...
git commit --allow-empty -m "chore: re-trigger build"

If you don’t know what to put in your commit messages, I wrote a post about conventional commits.

♻️ Squash commits

Let say I want to rebase the last 3 commits:

  1. git rebase -i HEAD~3
  2. Leave the first “pick” and replace the rest by “squash” (or “s”)
  3. Tidy up the commit message and save (:wq in vi).


Let say I want to add something in the commit fed14a4c

git commit --fixup

Terminal window
git add .
git commit --fixup HEAD~1
# or replace HEAD~1 by the commit hash (fed14a4c)
git rebase -i HEAD~3 --autosquash
# save&quit the file (:wq in VI)

🕹Execute command on each commit when rebasing

For massives features, you might end up with a branch with a few commits inside. And then tests are failing and you want to identify the “guilty commit”. You can use rebase --exec to execute a command on each commit of the history.

Terminal window
# Will run "npm test" command on the last 3 commit ❤️
git rebase HEAD~3 --exec "npm run test"

rebase --exec


Because it’s not all about git stash and git stash pop ;)

Terminal window
# save all tracked files
git stash save "your message"
# list your stashes
git stash list
# retrieve stash and delete
git stash apply stash@{1}
git stash drop stash@{1}
# ... or in 1 command
git stash pop stash@{1}

🗑 Clean

Terminal window
# remove branches that no longer exist on remote
git fetch -p
# remove all branch that contains "greenkeeper"
git fetch -p && git branch --remote | fgrep greenkeeper | sed 's/^.\{9\}//' | xargs git push origin --delete

🐙 GitHub = Git + Hub

I use Hub as a wrapper for git. To enable it you’ve to set hub as an alias for git (alias git='hub').

Terminal window
# Open browser and go to the repository url (GitHub only)
git browse

Other commands are available here.

🦄 Bonus: my favourite git aliases

Terminal window
alias g='git'
alias glog='git log --oneline --decorate --graph'
alias gst='git status'
alias gp='git push'
alias ga='git add'
alias gc='git commit -v'
# 🤘
alias yolo='git push --force'
# useful for daily stand-up
git-standup() {
AUTHOR=${AUTHOR:="`git config`"}
if [[ $(date +%u) == 1 ]] ; then
since="2 days ago"
git log --all --since "$since" --oneline --author="$AUTHOR"

And you, what’s your favourite git command?

About the author

Maxence Poutord

Hey, I'm Maxence Poutord, a passionate software engineer. In my day-to-day job, I'm working as a senior front-end engineer at Orderfox. When I'm not working, you can find me travelling the world or cooking.

Follow @_maxpou

Recommended posts