Skip to content

arslanbilal/git-cheat-sheet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Git and Git Flow Cheat Sheet

Awesome

Git


๐Ÿ“– About

This comprehensive Git cheat sheet helps you master Git commands without memorizing everything. Whether you're a beginner or an experienced developer, this guide provides quick reference to essential Git operations.

Contributions Welcome! Feel free to:

  • Fix grammar mistakes
  • Add new commands
  • Translate to your language
  • Improve explanations

๐Ÿ“‹ Table of Contents


๐Ÿ”ง Setup

View Configuration

Show current configuration:

git config --list

Show repository configuration:

git config --local --list

Show global configuration:

git config --global --list

Show system configuration:

git config --system --list

User Configuration

Set your name for version history:

git config --global user.name "[firstname lastname]"

Set your email address:

git config --global user.email "[valid-email]"

Display & Editor Settings

Enable automatic command line coloring:

git config --global color.ui auto

Set global editor for commits:

git config --global core.editor vi

โš™๏ธ Configuration Files

Scope Location Command Flag
Repository <repo>/.git/config --local
User ~/.gitconfig --global
System /etc/gitconfig --system

๐Ÿ†• Create Repository

Clone Existing Repository

Via SSH:

git clone ssh://user@domain.com/repo.git

Via HTTPS:

git clone https://domain.com/user/repo.git

Initialize New Repository

Create repository in current directory:

git init

Create repository in specific directory:

git init <directory>

๐Ÿ“ Local Changes

Check Status & Differences

View working directory status:

git status

Show changes to tracked files:

git diff

Show changes in specific file:

git diff <file>

Staging Changes

Add all current changes:

git add .

Add specific files:

git add <filename1> <filename2>

Interactively add parts of a file:

git add -p <file>

Committing Changes

Commit all tracked file changes:

git commit -a

Commit staged changes:

git commit

Commit with message:

git commit -m 'message here'

Skip staging and commit with message:

git commit -am 'message here'

Commit with specific date:

git commit --date="`date --date='n day ago'`" -am "<Commit Message Here>"

Modify Last Commit

โš ๏ธ Warning: Don't amend published commits!

Amend last commit:

git commit -a --amend

Amend without changing commit message:

git commit --amend --no-edit

Change committer date:

GIT_COMMITTER_DATE="date" git commit --amend

Change author date:

git commit --amend --date="date"

Stashing Changes

Save current changes temporarily:

git stash

Apply last stashed changes:

git stash apply

Apply specific stash:

git stash apply stash@{stash_number}

Use git stash list to see available stashes

Remove last stash:

git stash drop

Move uncommitted changes to another branch:

git stash
git checkout branch2
git stash pop

๐Ÿ” Search

Text Search

Search for text in all files:

git grep "Hello"

Search in specific version:

git grep "Hello" v2.5

Commit Search

Find commits that introduced specific keyword:

git log -S 'keyword'

Search with regular expression:

git log -S 'keyword' --pickaxe-regex

๐Ÿ“– Commit History

Basic History

Show all commits (detailed):

git log

Show commits (one line each):

git log --oneline

Show commits by specific author:

git log --author="username"

Show changes for specific file:

git log -p <file>

Advanced History

Compare branches:

git log --oneline <origin/master>..<remote/master> --left-right

Show who changed what and when:

git blame <file>

Reference Logs

Show reference log:

git reflog show

Delete reference log:

git reflog delete

๐Ÿ“ Move / Rename

Rename a file:

git mv Index.txt Index.html

๐ŸŒฟ Branches & Tags

List Branches

List local branches:

git branch

List all branches (local + remote):

git branch -a

List remote branches:

git branch -r

List merged branches:

git branch --merged

Switch & Create Branches

Switch to existing branch:

git checkout <branch>

Create and switch to new branch:

git checkout -b <branch>

Switch to previous branch:

git checkout -

Create branch from existing branch:

git checkout -b <new_branch> <existing_branch>

Create branch from specific commit:

git checkout <commit-hash> -b <new_branch_name>

Create branch without switching:

git branch <new-branch>

Create tracking branch:

git branch --track <new-branch> <remote-branch>

Branch Operations

Checkout single file from different branch:

git checkout <branch> -- <filename>

Apply specific commit from another branch:

git cherry-pick <commit hash>

Rename current branch:

git branch -m <new_branch_name>

Delete local branch:

git branch -d <branch>

Force delete local branch:

git branch -D <branch>

โš ๏ธ Warning: You will lose unmerged changes!

Tags

Create tag at HEAD:

git tag <tag-name>

Create annotated tag:

git tag -a <tag-name>

Create tag with message:

git tag <tag-name> -am 'message here'

List all tags:

git tag

List tags with messages:

git tag -n

๐Ÿ”„ Update & Publish

Remote Management

List configured remotes:

git remote -v

Show remote information:

git remote show <remote>

Add new remote:

git remote add <remote> <url>

Rename remote:

git remote rename <remote> <new_remote>

Remove remote:

git remote rm <remote>

โ„น๏ธ Note: This only removes the remote reference locally, not the remote repository itself.

Fetch & Pull

Download changes without merging:

git fetch <remote>

Download and merge changes:

git pull <remote> <branch>

Get changes from main branch:

git pull origin master

Pull with rebase:

git pull --rebase <remote> <branch>

Push & Publish

Publish local changes:

git push <remote> <branch>

Delete remote branch:

# Git v1.7.0+
git push <remote> --delete <branch>

# Git v1.5.0+
git push <remote> :<branch>

Publish tags:

git push --tags

๐Ÿ”€ Merge & Rebase

Merge Operations

Merge branch into current HEAD:

git merge <branch>

Configure merge tool globally:

git config --global merge.tool meld

Use configured merge tool:

git mergetool

Rebase Operations

โš ๏ธ Warning: Don't rebase published commits!

Rebase current HEAD onto branch:

git rebase <branch>

Abort rebase:

git rebase --abort

Continue rebase after resolving conflicts:

git rebase --continue

Conflict Resolution

Mark file as resolved:

git add <resolved-file>

Remove resolved file:

git rm <resolved-file>

Squashing Commits

Interactive rebase for squashing:

git rebase -i <commit-just-before-first>

Example squash configuration:

# Before
pick <commit_id>
pick <commit_id2>
pick <commit_id3>

# After (squash commit_id2 and commit_id3 into commit_id)
pick <commit_id>
squash <commit_id2>
squash <commit_id3>

โ†ฉ๏ธ Undo

Discard Changes

Discard all local changes:

git reset --hard HEAD

Unstage all files:

git reset HEAD

Discard changes in specific file:

git checkout HEAD <file>

Reset Operations

Reset to previous commit (discard all changes):

git reset --hard <commit>

Reset to remote branch state:

git reset --hard <remote/branch>
# Example: git reset --hard upstream/master

Reset preserving changes as unstaged:

git reset <commit>

Reset preserving uncommitted local changes:

git reset --keep <commit>

Revert Commits

Revert commit (create new commit with opposite changes):

git revert <commit>

Clean Ignored Files

Remove accidentally committed files that should be ignored:

git rm -r --cached .
git add .
git commit -m "remove ignored files"

๐ŸŒŠ Git Flow

Improved Git-flow: git-flow-avh

๐Ÿ“‹ Table of Contents


๐Ÿ”ง Setup {#setup-1}

Prerequisite: Working Git installation required. Git-flow works on macOS, Linux, and Windows.

macOS (Homebrew):

brew install git-flow-avh

macOS (MacPorts):

port install git-flow

Linux (Debian-based):

sudo apt-get install git-flow

Windows (Cygwin):

Requires wget and util-linux

wget -q -O - --no-check-certificate https://raw.githubusercontent.com/petervanderdoes/gitflow/develop/contrib/gitflow-installer.sh install <state> | bash

๐Ÿš€ Getting Started

Git-flow needs initialization to customize your project setup.

Initialize (interactive):

git flow init

You'll answer questions about branch naming conventions. Default values are recommended.

Initialize (use defaults):

git flow init -d

โœจ Features

Features are for developing new functionality for upcoming releases. They typically exist only in developer repositories.

Start new feature:

git flow feature start MYFEATURE

Creates feature branch based on 'develop' and switches to it

Finish feature:

git flow feature finish MYFEATURE

This will:

  1. Merge MYFEATURE into 'develop'
  2. Remove the feature branch
  3. Switch back to 'develop'

Publish feature (for collaboration):

git flow feature publish MYFEATURE

Get published feature:

git flow feature pull origin MYFEATURE

Track origin feature:

git flow feature track MYFEATURE

๐ŸŽ Make a Release

Releases support preparation of new production releases, allowing minor bug fixes and preparing meta-data.

Start release:

git flow release start RELEASE [BASE]

Creates release branch from 'develop'. Optionally specify [BASE] commit SHA-1.

Publish release:

git flow release publish RELEASE

Track remote release:

git flow release track RELEASE

Finish release:

git flow release finish RELEASE

This will:

  1. Merge release branch into 'master'
  2. Tag the release
  3. Back-merge release into 'develop'
  4. Remove release branch

๐Ÿ’ก Don't forget: Push your tags with git push --tags


๐Ÿ”ฅ Hotfixes

Hotfixes address critical issues in live production versions. They branch off from the corresponding tag on master.

Start hotfix:

git flow hotfix start VERSION [BASENAME]

Finish hotfix:

git flow hotfix finish VERSION

Merges back into both 'develop' and 'master', and tags the master merge


๐Ÿ“Š Commands Overview

Git Flow Commands

๐ŸŒŠ Git Flow Schema

Git Flow Schema


๐ŸŒ Other Languages

This cheat sheet is available in multiple languages:

Language Link
๐Ÿ‡ธ๐Ÿ‡ฆ Arabic git-cheat-sheet-ar.md
๐Ÿ‡ง๐Ÿ‡ฉ Bengali git-cheat-sheet-bn.md
๐Ÿ‡ง๐Ÿ‡ท Brazilian Portuguese git-cheat-sheet-pt_BR.md
๐Ÿ‡จ๐Ÿ‡ณ Chinese git-cheat-sheet-zh.md
๐Ÿ‡ฉ๐Ÿ‡ช German git-cheat-sheet-de.md
๐Ÿ‡ฌ๐Ÿ‡ท Greek git-cheat-sheet-el.md
๐Ÿ‡ฎ๐Ÿ‡ณ Hindi git-cheat-sheet-hi.md
๐Ÿ‡ฐ๐Ÿ‡ท Korean git-cheat-sheet-ko.md
๐Ÿ‡ต๐Ÿ‡ฑ Polish git-cheat-sheet-pl.md
๐Ÿ‡ช๐Ÿ‡ธ Spanish git-cheat-sheet-es.md
๐Ÿ‡น๐Ÿ‡ท Turkish git-cheat-sheet-tr.md

๐Ÿค Contributing

We welcome contributions! You can:

  • ๐Ÿ› Report bugs or typos
  • โœจ Add new Git commands
  • ๐ŸŒ Translate to new languages
  • ๐Ÿ’ก Improve explanations
  • ๐Ÿ“ Enhance formatting

How to contribute:

  1. Fork this repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is open source and available under the MIT License.


โญ Star this repository if you found it helpful!

About

:octocat: git and git flow cheat sheet

Topics

Resources

Stars

Watchers

Forks