
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.
🧭 Navigation - Go to the previous branch
git checkout -
🔍 Get the history
# Log in one linegit log --oneline
# Retrieve all commits by message# Here all commit that contain 'homepage'git log --all --grep='homepage'
# Retrieve all commit by authorgit log --author="Maxence"
🙈Ooops #1: I reseted an unwanted commit. How to rollback?
# Get everything you didgit 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?
git fetch origingit checkout mastergit reset --hard origin/master# You're now up-to-date with master!
🕵🏻♂️Difference between my branch and master
git diff master..my-branch
✔ Custom commits
# Edit last commitgit commit --amend -m "A better message"
# Add something to the last commit without writing message againgit 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:
git rebase -i HEAD~3
- Leave the first “pick” and replace the rest by “
squash
” (or “s
”) - Tidy up the commit message and save (
:wq
in vi).
🎯Fixup
Let say I want to add something in the commit fed14a4c
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.
# Will run "npm test" command on the last 3 commit ❤️git rebase HEAD~3 --exec "npm run test"
🦋Stash
Because it’s not all about git stash
and git stash pop
;)
# save all tracked filesgit stash save "your message"
# list your stashesgit stash list
# retrieve stash and deletegit stash apply stash@{1}git stash drop stash@{1}# ... or in 1 commandgit stash pop stash@{1}
🗑 Clean
# remove branches that no longer exist on remotegit 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'
).
# Open browser and go to the repository url (GitHub only)git browse
Other commands are available here.
🦄 Bonus: my favourite git aliases
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-upgit-standup() { AUTHOR=${AUTHOR:="`git config user.name`"}
since=yesterday if [[ $(date +%u) == 1 ]] ; then since="2 days ago" fi
git log --all --since "$since" --oneline --author="$AUTHOR"}
And you, what’s your favourite git command?
About the author

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 me on BlueskyRecommended posts

1. Split your application into completely isolated modules. 2. Consider micro-frontends architecture. 3. Don't put everything in the Vuex Store

How Testing Library helps you to write better integration test