
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

Thomas Harris is a fraudulent YouTuber who uses fake crypto tutorials to spread malware. He artificially inflates his channel's popularity and promotes a malicious script that downloads harmful files and steals crypto. This scam, powered by AI-generated content, highlights the growing sophistication of online threats.

How Testing Library helps you to write better integration test