Skip to main content

Git cheatsheet

Updated 4 min readMarkdown

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>"
    
  • Use the current branch for push commands

      git config --global push.default current
    

SSH keys setup

  • Generate separate SSH keys for Github and Bitbucket with the following command, type the filename path and passphrase.

      ssh-keygen
    
  • 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
    

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 the status of the local changes

      git status
    
  • Add new changes

      git add some-file.js
      git add .
    
  • 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
    
  • Remove (unstage) the changes from the local stage

      git reset some-file.js
      git reset
    
  • 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
      
  • Revert the file changes

      git checkout -- some-file.js
    
  • Merge the specified branch into the current one

      git merge <BRANCH_NAME>
    
  • Revert specific commit. The following command creates a new commit

      git revert <COMMIT_HASH>
    

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
    
  • Tags

    • Remove the following tag locally

        git tag -d v0.13.29
      
  • Find removed commits

      git reflog
      git checkout <COMMIT_HASH>
    
  • Remove the initial commit

      git update-ref -d HEAD
    
  • 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
      

About the author

No comments yet. Be the first to comment.

More from this blog