DEV Community

Cover image for Git cheatsheet
Željko Šević
Željko Šević

Posted on • Originally published at sevic.dev on

Git cheatsheet

Git is one of the version control systems, and it's a prerequisite for development jobs. This post covers most of the git commands I use.

Configuration

  • Set user configuration for every project if you use multiple accounts
  git config user.name "<USERNAME>"
  git config user.email "<EMAIL_ADDRESS>"
Enter fullscreen mode Exit fullscreen mode
  • Use the current branch for push commands
  git config --global push.default current
Enter fullscreen mode Exit fullscreen mode

SSH keys setup

  • Generate separate SSH keys for Github and Bitbucket with the following command, type the filename path and passphrase.
  ssh-keygen
Enter fullscreen mode Exit fullscreen mode
  • Add generated public keys to Github and Bitbucket

  • Run the following commands to activate SSH keys

  eval `ssh-agent -s`
  ssh-add ~/.ssh/id_rsa_github
  ssh-add ~/.ssh/id_rsa_bitbucket
Enter fullscreen mode Exit fullscreen mode

Basic commands

  • The repository setup

    • Initialize a git repository
    git init
    
    • Clone an existing repository
    # git clone <REPOSITORY_URL>
    git clone git@github.com:zsevic/pwa-starter.git
    
    • Add the remote repository
    # git remote add <REMOTE_NAME> <REPOSITORY_URL>
    git remote add origin git@github.com:zsevic/pwa-starter.git
    git remote add upstream git@github.com:zsevic/pwa-starter.git
    
    • Update the URL for the remote repository
    # git remote set-url <REMOTE_NAME> <REPOSITORY_URL>
    git remote set-url origin git@github.com:zsevic/pwa-starter.git
    
    • Get a list of configured remote connections
    git remote -v
    
  • Branches

    • Get a list of the branches
    git branch
    
    • Create and switch to the new branch
    git checkout -b new-branch
    
    • Checkout to a specific commit and create a new branch out of it
    git log # find a hash from a specific commit
    git checkout <COMMIT_HASH>
    git switch -c <NEW_BRANCH_NAME>
    
    • Switch to another branch
    git checkout existing-branch
    
    • Rename the current branch
    git branch -m <NEW_BRANCH_NAME>
    
    • Delete branch
    git branch -D other-existing-branch
    
    • Fetch all the remote branches
    git fetch --all
    
    • Get a list of remote branches without cloning the repo or verify if the user has "read" access
    git ls-remote <REPOSITORY_URL>
    
  • Get the status of the local changes

  git status
Enter fullscreen mode Exit fullscreen mode
  • Add new changes
  git add some-file.js
  git add .
Enter fullscreen mode Exit fullscreen mode
  • Commits

    • Commit the changes
    git commit -m "Commit message"
    
    • Empty commit without any files
    git commit --allow-empty -m "Trigger CI pipeline"
    
    • Commit the changes and skip running git hooks
    git commit -m "Commit message" --no-verify
    
    • Update the latest commit message and add new changes to the latest commit
    git commit -m "Commit message" --amend
    
  • Push the changes to the remote repository

    • Push the changes to the current branch when the current branch is configured as the default one
    git push
    
    • Push the changes to the remote branch
    # git push <REMOTE_NAME> <BRANCH_NAME>
    git push origin master
    
    • Force push the changes to the feature branch
    # git push <REMOTE_NAME> <FEATURE_BRANCH_NAME>
    git push origin feature-branch -f
    
  • Fetch and merge remote changes to the local branch

  # git pull <REMOTE_NAME> <BRANCH_NAME>
  git pull origin master
Enter fullscreen mode Exit fullscreen mode
  • Remove (unstage) the changes from the local stage
  git reset some-file.js
  git reset
Enter fullscreen mode Exit fullscreen mode
  • Differences between commits

    • Get a difference compared to the latest commit
    git diff some-file.js
    git diff
    
    • Get a difference between the last two commits
    git diff HEAD^ HEAD
    # or
    git diff HEAD HEAD~1
    
  • Revert the file changes

  git checkout -- some-file.js
Enter fullscreen mode Exit fullscreen mode
  • Merge the specified branch into the current one
  git merge <BRANCH_NAME>
Enter fullscreen mode Exit fullscreen mode
  • Revert specific commit. The following command creates a new commit
  git revert <COMMIT_HASH>
Enter fullscreen mode Exit fullscreen mode

Miscellaneous

  • Resets

    • Soft reset (commits are removed, but changes from the removed commits are staged)
    # git reset --soft HEAD~{NUMBER_OF_COMMITS_TO_SOFT_REMOVE}
    git reset --soft HEAD~2
    
    • Hard reset (both commits and changes are removed)
    # git reset --hard HEAD~{NUMBER_OF_COMMITS_TO_HARD_REMOVE}
    git reset --hard HEAD~1 # equal as git reset --hard HEAD^
    
    • Get the latest remote changes when pulling doesn't work
    git reset --hard origin/<BRANCH_NAME>
    
  • Stashing

  git add .
  git stash save <STASH_NAME>
  git stash list
  git stash apply --index 0
Enter fullscreen mode Exit fullscreen mode
  • Tags

    • Remove the following tag locally
    git tag -d v0.13.29
    
  • Find removed commits

  git reflog
  git checkout <COMMIT_HASH>
Enter fullscreen mode Exit fullscreen mode
  • Remove the initial commit
  git update-ref -d HEAD
Enter fullscreen mode Exit fullscreen mode
  • Patching

    • Create a patch from the latest commits
    # git format-patch -{NUMBER_OF_COMMITS}
    git format-patch -1
    
    • Apply the patches
    git apply 0001-latest-commit.patch
    
  • Git submodules

    • Add git submodule
    # git submodule add -- <REPOSITORY_URL> <DIRECTORY_PATH>
    git submodule add -- git@github.com:zsevic/pwa-starter.git template
    
    • Retrieve the latest changes for the git submodule
    # git submodule update --remote <DIRECTORY_PATH>
    git submodule update --remote template
    
    • Resolve conflict in the submodule
    # git reset HEAD <DIRECTORY_PATH>
    git reset HEAD template
    git commit
    

Course

Build your SaaS in 2 weeks - Start Now

Top comments (2)

Collapse
 
randominsomnia profile image
Thomas K.

Very well done! It's a really good reference to get people up to speed ☺

Collapse
 
zsevic profile image
Željko Šević

Thanks for the feedback! I'm glad you find it useful.