Skip to main content

Git Cheat Sheet

00:03:00:00
A ThreeJS scene, featuring a cube that reacts to devices' accessibility settings.

Hello there! Here I would like to share my most commonly used git commands and a few aliases to keep your console simple and beautiful by formatting.

Create

# Create a new local repository
git init
# Clone an existing repository
git clone ssh://user@domain.com/repo.git

Check Changes

# Check all changes
git fetch
#Check status
git status
#Changes to tracked files
git diff
#Log
git log --oneline
#Diff
git log --stat
#Shortlog
git shortlog
#Graphs
git log --graph --oneline --decorate
#Show Log By Author
git log --author="John"
git log --author="John\|Mary"

Stash

#Add To Stash
git stash
#Show Stash List
git stash show
#Pop Stash
git stash pop
#Apply Spesific Stash
git stash apply stash@{index}
#Drop Spesific Stash
git stash drop stash@{index}

Stage & Commit

#Add all changes to next commit
git add .
#Add file changes to next commit
git add
#Commit staged changes
git commit -m "Commit Message"
#Change the last commit
git commit --ammend
#Change the last commit name
git commit --amend -m "New commit message"

Branches & Tags

#List all existing branches
git branch -av
#Switch HEAD branch
git checkout
#Checkout to a remote branch
git checkout --track origin/branch-name
#Create branch
git branch
#Delete local branch
git branch -D
#Delete origin branch
git branch -dr origin/branch
#Tag current commit
git tag

Update & Publish

#Download all changes
git pull
#Upload all changes
git push
#Publish tags
git push --tags

Merge & Rebase

#Merge into current HEAD
git merge
#Rebase your current HEAD (Don't rebase published commits!)
git rebase
#Abort rebase
git rebase --abort
#Continue rebase
git rebase --continue
#Use your configured merge tool for conflicts
git mergetool
#After solving conflicts mark as resolved
git add 
git rm

UNDO

#Discard all tracked changes
git checkout .
#Discard all local changes on working directory
git reset --hard HEAD
#Discard all local changes in file
git checkout HEAD
#Reset HEAD pointer into a previous commit
git reset --hard

Advanced Stuff

#Local Garbage Collection

# finds and removes all references of unused commits in reflog
git reflog expire --expire="1 hour" --all

# finds remove all references of unreachable commits in reflog
git reflog expire --expire-unreachable="1 hour" --all 

# prune all unreachable objects from database
git prune --expire="1 hour" -v 

# clean-up all unnecessary files and optimize the local repo
git gc --aggressive --prune="1 hour" 

# count latest objects
count-objects -vH
#Delete Old History (link: https://stackoverflow.com/a/41953383) 

# checkout to the status of the git repo at commit f; creating a branch named "temp"
git checkout --orphan temp 

# create a new commit that is to be the new root commit
git commit -m "new root commit" 

# now rebase the part of history from  to master on the temp branch
git rebase --onto temp  master 

# we don't need the temp branch anymore
git branch -D temp 

# this is a destructive operation
git push -f
Check LFS
git lfs ls-files # It will show all tracked files.
git lfs push origin master --all # Push any missing files
git count-objects -vH # Check the real size of the repository.
#Editing Global Config File
git config --global -e
#Setting An Editor For Config File
[core]
    editor = 'Path/To/Your/Editor.exe'

Git Alias

#Shortcut Git Status: Use 'git st' to show git status -sb
git config --global alias.st "status -sb"
#Formatting Git Log: Use 'git ls' to show log with colored format
git config --global alias.ls "log -n 15 --pretty=format:'%C(Yellow) %h %Cred%ad %Cblue%an %Creset%s%Cgreen%d' --date=short --all"
#Formatting Git Graph: Use 'git graph' to show log with colored format
git config --global alias.graph "log -n 25 --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"
#Show only modified and deleted files including your extension

# instead of ls-cs and *.cs, write your own extension
git config --global alias.ls-cs "ls-files -zmd *.cs"
#Ignoring Files Locally

# use 'git ignore filePath' to ignore a file locally
git config --global alias.ignore "update-index --assume-unchanged"
# use 'git unignore filePath' to unignore a file locally
git config --global alias.unignore "update-index --no-assume-unchanged"
# use 'git ignored' to see your ignored files
git config --global alias.ignored "!git ls-files -v | grep "^[[:lower:]]""

Bonus

Git Config settings for external diff / merge tools

[merge]
    tool = meld
[mergetool "meld"]
    cmd = \"PathTo/Meld.exe\"g --auto-merge \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\" --label \"MERGE (Local - Base - Remote)\"
    trustExitCode = false
[mergetool]
    prompt = false
    keepBackup = false

[diff]
    guitool = meld
[difftool "meld"]
    cmd = \"PathTo/Meld.exe\" \"$LOCAL\" \"$REMOTE\" --label \"DIFF (Local - Remote)\"

Dark Meld On MacOS You can also activate hidden dark mode within Meld thanks to GTK

First, you need to open Meld settings

sudo nano /Applications/Meld.app/Contents/MacOS/Meld

Then add the entry below within environment, just after "LC_CTYPE": LANG add "GTK_THEME":"Adwaita:dark"