Skip to content

Instantly share code, notes, and snippets.

Last active June 17, 2024 10:34
Show Gist options
  • Save hofmannsven/6814451 to your computer and use it in GitHub Desktop.
Save hofmannsven/6814451 to your computer and use it in GitHub Desktop.
Git CLI Cheatsheet


Global Settings


Press minus + shift + s and return to chop/fold long lines!

Show folder content: ls -la


Do not put (external) dependencies in version control!


See where Git is located: which git

Get the version of Git: git --version

Create an alias (shortcut) for git status: git config --global status

Help: git help


Initialize Git: git init

Get everything ready to commit: git add .

Get custom file ready to commit: git add index.html

Commit changes: git commit -m "Message"

Commit changes with title and description: git commit -m "Title" -m "Description..."

Add and commit in one step: git commit -am "Message"

Remove files from Git: git rm index.html

Update all changes: git add -u

Remove file but do not track anymore: git rm --cached index.html

Move or rename files: git mv index.html dir/index_new.html

Undo modifications (restore files from latest commited version): git checkout -- index.html

Restore file from a custom commit (in current branch): git checkout 6eb715d -- index.html


Go back to commit: git revert 073791e7dd71b90daa853b2c5acc2c925f02dbc6

Soft reset (move HEAD only; neither staging nor working dir is changed): git reset --soft 073791e7dd71b90daa853b2c5acc2c925f02dbc6

Undo latest commit: git reset --soft HEAD~

Mixed reset (move HEAD and change staging to match repo; does not affect working dir): git reset --mixed 073791e7dd71b90daa853b2c5acc2c925f02dbc6

Hard reset (move HEAD and change staging dir and working dir to match repo): git reset --hard 073791e7dd71b90daa853b2c5acc2c925f02dbc6

Hard reset of a single file (@ is short for HEAD): git checkout @ -- index.html

Update & Delete

Test-Delete untracked files: git clean -n

Delete untracked files (not staging): git clean -f

Unstage (undo adds): git reset HEAD index.html

Update most recent commit (also update the commit message): git commit --amend -m "New Message"


Show branches: git branch

Create branch: git branch branchname

Change to branch: git checkout branchname

Create and change to new branch: git checkout -b branchname

Rename branch: git branch -m branchname new_branchname or: git branch --move branchname new_branchname

Show all completely merged branches with current branch: git branch --merged

Delete merged branch (only possible if not HEAD): git branch -d branchname or: git branch --delete branchname

Delete not merged branch: git branch -D branch_to_delete


True merge (fast forward): git merge branchname

Merge to master (only if fast forward): git merge --ff-only branchname

Merge to master (force a new commit): git merge --no-ff branchname

Stop merge (in case of conflicts): git merge --abort

Stop merge (in case of conflicts): git reset --merge // prior to v1.7.4

Undo local merge that hasn't been pushed yet: git reset --hard origin/master

Merge only one specific commit: git cherry-pick 073791e7

Rebase: git checkout branchname » git rebase master or: git merge master branchname (The rebase moves all of the commits in master onto the tip of branchname.)

Cancel rebase: git rebase --abort

Squash multiple commits into one: git rebase -i HEAD~3 (source)

Squash-merge a feature branch (as one commit): git merge --squash branchname (commit afterwards)


Put in stash: git stash save "Message"

Show stash: git stash list

Show stash stats: git stash show stash@{0}

Show stash changes: git stash show -p stash@{0}

Use custom stash item and drop it: git stash pop stash@{0}

Use custom stash item and do not drop it: git stash apply stash@{0}

Use custom stash item and index: git stash apply --index

Create branch from stash: git stash branch new_branch

Delete custom stash item: git stash drop stash@{0}

Delete complete stash: git stash clear

Gitignore & Gitkeep


Useful templates:

Add or edit gitignore: nano .gitignore

Track empty dir: touch dir/.gitkeep


Show commits: git log

Show oneline-summary of commits: git log --oneline

Show oneline-summary of commits with full SHA-1: git log --format=oneline

Show oneline-summary of the last three commits: git log --oneline -3

Show only custom commits: git log --author="Sven" git log --grep="Message" git log --until=2013-01-01 git log --since=2013-01-01

Show only custom data of commit: git log --format=short git log --format=full git log --format=fuller git log --format=email git log --format=raw

Show changes: git log -p

Show every commit since special commit for custom file only: git log 6eb715d.. index.html

Show changes of every commit since special commit for custom file only: git log -p 6eb715d.. index.html

Show stats and summary of commits: git log --stat --summary

Show history of commits as graph: git log --graph

Show history of commits as graph-summary: git log --oneline --graph --all --decorate

Shows commits where the given string was added or removed: git log -S 'assertInvalid' -- src/Illuminate/Testing/TestResponse.php (If assertInvalid only appears once in the git history of src/Illuminate/Testing/TestResponse.php file, it means that once it was introduced, it wasn't removed or added back, hence only one commit is shown in the results.)


Compare modified files: git diff

Compare modified files and highlight changes only: git diff --color-words index.html

Compare modified files within the staging area: git diff --staged

Compare branches: git diff master..branchname

Compare branches like above: git diff --color-words master..branchname^

Compare commits: git diff 6eb715d git diff 6eb715d..HEAD git diff 6eb715d..537a09f

Compare commits of file: git diff 6eb715d index.html git diff 6eb715d..537a09f index.html

Compare without caring about spaces: git diff -b 6eb715d..HEAD or: git diff --ignore-space-change 6eb715d..HEAD

Compare without caring about all spaces: git diff -w 6eb715d..HEAD or: git diff --ignore-all-space 6eb715d..HEAD

Useful comparings: git diff --stat --summary 6eb715d..HEAD

Blame: git blame -L10,+1 index.html

Releases & Version Tags

Show all released versions: git tag

Show all released versions with comments: git tag -l -n1

Create release version: git tag v1.0.0

Create release version with comment: git tag -a v1.0.0 -m 'Message'

Checkout a specific release version: git checkout v1.0.0


Show remote: git remote

Show remote details: git remote -v

Add remote upstream from GitHub project: git remote add upstream

Add remote upstream from existing empty project on server: git remote add upstream ssh://root@

Fetch: git fetch upstream

Fetch a custom branch: git fetch upstream branchname:local_branchname

Merge fetched commits: git merge upstream/master

Remove origin: git remote rm origin

Show remote branches: git branch -r

Show all branches (remote and local): git branch -a

Create and checkout branch from a remote branch: git checkout -b local_branchname upstream/remote_branchname

Compare: git diff origin/master..master

Push (set default with -u): git push -u origin master

Push: git push origin master

Force-Push: `git push origin master --force

Pull: git pull

Pull specific branch: git pull origin branchname

Fetch a pull request on GitHub by its ID and create a new branch: git fetch upstream pull/ID/head:new-pr-branch

Clone to localhost: git clone or: git clone ssh://

Clone to localhost folder: git clone ~/dir/folder

Clone specific branch to localhost: git clone -b branchname

Clone with token authentication (in CI environment): git clone https://oauth2:<token>

Delete remote branch (push nothing): git push origin :branchname or: git push origin --delete branchname


Create a zip-archive: git archive --format zip --output master

Export/write custom log to a file: git log --author=sven --all > log.txt


Ignore files that have already been committed to a Git repository:


Hide Git on the web via .htaccess: RedirectMatch 404 /\.git (more info here:

Large File Storage


Install: brew install git-lfs

Track *.psd files: git lfs track "*.psd" (init, add, commit and push as written above)

Copy link

I have committed all my changes to one branch and checkout that branch so I have all codes to my local repo. Now when I will do another commit while checking out I want only modified files into my local repo. what command I can use Or how I can get only modified files in my local repo?

Any help will be appreciated. Thanks

Copy link

Simply awesome...very helpful

Copy link

awesome. Thank you

Copy link

This is very helpful to me. But,
What is the command if i want to fetch one specific remote branch?

Copy link

Very helpful. Thanks

Copy link


Copy link

very helpful 👍

Copy link

JDSRAO commented Jan 10, 2019

very helpful thank you!

Copy link

Copy link


Copy link

haseebkhan1421 commented Jan 23, 2019

how can we push repository on to remote using git Bash

Asking because I'm new to this version control system

Copy link

Wow, Thank you for this.

Copy link

shakiz commented Mar 19, 2019

Wohoo!! Thanks for sharing these information.

Copy link

Nice summary! Very useful! Thank you!

Copy link

best git summary I have ever seen! Thank You!

Copy link

Hakky54 commented Oct 14, 2019

Hi Sven, thank you for this great cheatsheet. Could you maybe add this one at the git stash part: git stash save --include-untracked --keep-index
This is an option to stash all tracked and untracked git changes.

Copy link

anieriz commented Oct 28, 2019

Hi, thanks for this cheatsheet. Just what i wanted. Nice work.

Copy link

Thank you very much.

Copy link

Releases & Version Tags

  • Git tag identifying HEAD of current branch: git tag --points-at HEAD

Copy link

Very useful! Thank you!

Copy link

Thank you :)

Copy link


Copy link

Thank You!

Copy link

It's very useful, Good work man .. Thanks 😊

Copy link

Arj20 commented Jun 29, 2021

Thank you!

Copy link

Thanks a lot.

Copy link

I am very thankful by your work

Copy link


Copy link

Helpful, Thanks a lot

Copy link

lizardkingLK commented Oct 12, 2023

Cloning with submodules

  • Clone the repo
    git clone <repo_url>

  • Go to Root
    cd <repo_name>

  • Initialize submodules
    git submodule init

  • Clone submodules
    git submodule update

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment