Git Cheat Sheet
Tags: git, cli
Published: 2023-02-06 18:09:51

---
title: Git Cheat Sheet
description: Most common git commands and beautiful aliases to speed up your workflow
tags: ['git, cli']
---

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.

**EDIT:** 
I have started a new project for common cli tool cheatsheets. You can find git cheatsheets there!
App: https://dev-cheats.vercel.app
Article: https://dev.to/excalith/dev-cheats-5b3o

## Create
```bash
# Create a new local repository
git init

# Clone an existing repository
git clone ssh://user@domain.com/repo.git
```



## Check Changes
```bash
# 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
```bash
# 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 &amp; Commit
```bash
# 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 &amp; Tags
```bash
# 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 &amp; Publish
```bash
# Download all changes
git pull

# Upload all changes
git push

# Publish tags
git push --tags
```



## Merge &amp; Rebase
```bash
# 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
```bash
#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

```bash
# 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
```

```bash
# 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
```

```bash
# 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.
```

```bash
# Editing Global Config File
git config --global -e
```

```bash
# Setting An Editor For Config File
[core]
	editor = 'Path/To/Your/Editor.exe'
```



## Git Alias
```bash
# 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:]]""
```