Skip to main content

Git Cheat Sheet

00:05:30:00

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 on public branches!)
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:]]""