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>"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-keygenRun 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 initClone an existing repository
# git clone <REPOSITORY_URL> git clone git@github.com:zsevic/pwa-starter.gitAdd 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.gitUpdate 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.gitGet a list of configured remote connections
git remote -v
Branches
Get a list of the branches
git branchCreate and switch to the new branch
git checkout -b new-branchCheckout 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-branchRename the current branch
git branch -m <NEW_BRANCH_NAME>Delete branch
git branch -D other-existing-branchFetch all the remote branches
git fetch --all
Get the status of the local changes
git statusAdd 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-verifyUpdate 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 pushPush the changes to the remote branch
# git push <REMOTE_NAME> <BRANCH_NAME> git push origin masterForce 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 masterRemove (unstage) the changes from the local stage
git reset some-file.js git resetDifferences between commits
Get a difference compared to the latest commit
git diff some-file.js git diffGet a difference between the last two commits
git diff HEAD^ HEAD
Revert the file changes
git checkout -- some-file.jsMerge 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~2Hard 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 0Tags
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 HEADPatching
Create a patch from the latest commits
# git format-patch -{NUMBER_OF_COMMITS} git format-patch -1Apply 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 templateRetrieve the latest changes for the git submodule
# git submodule update --remote <DIRECTORY_PATH> git submodule update --remote template
About the author
Node.js developer, creating tech content at https://sevic.dev
Comments
Join the discussionNo comments yet. Be the first to comment.