Everything I Know About Git

Personal Notes

Patricia Aas, 07 November 2019

Ok, fine, I probably know more, and yes, you will probably disagree with some of this, but we both know I wrote this more for me than for you, so you’re welcome :)

Setup and config

Make aliases

git config --global alias.st status

Make pull rebase

git config --global pull.rebase true

Then make pull auto stash

git config --global rebase.autoStash true

See state

Commit log

git log

Status of the current tree

git status

See diffs

git diff <filename>

git diff



Get changes from remote

git pull

Commit changes locally

git add <filename>

git commit -m "Commit message"

Push local changes to remote

git push

Put my changes safely / temporarily away

git stash

Get them back

git stash pop


List all branches

git branch -a

Create a remote branch and track it

git checkout -b <branch name>

git push -u origin <branch name>

Delete remote branch and tracking branch

git branch -d <branch name>

git push -d origin <branch name>

Commit massaging

Commit this into the previous (unpushed) commit (other usecase: fix commit message)

git commit --amend

Create auto squashed commits (needs rebase -i later)

git commit --fixup <SHA>

Pick bits of changes to a file

git add -p <filename>

Reorder or squash commits

git rebase -i HEAD~<number of commits>

Pick a specific commit into this branch

git cherry-pick <SHA>

Useful link

Fix state of tree

Reset to some known SHA - but keep the changes in staging

git reset <SHA>

Remove everything that happened after this

git reset --hard <SHA>

Make my forks master follow remotes master

Add the remote

git remote add <made_up_name> git@github.com:<user>/<repo>.git

Fetch the remote

git fetch <made_up_name>

Make master track remotes master

git branch -u <made_up_name>/master master


Get state of remote without changing the state of my tree

git fetch

Create a git repo

git init .