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:]]""