Git cheatsheet
Željko Šević
Posted on January 6, 2023
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
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 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
- 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 # or git diff HEAD HEAD~1
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
- Resolve conflict in the submodule
# git reset HEAD <DIRECTORY_PATH> git reset HEAD template git commit
Boilerplate
Here is the link to the boilerplate I use for the development.
💖 💪 🙅 🚩
Željko Šević
Posted on January 6, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
webdev Understanding HTTP, Cookies, Email Protocols, and DNS: A Guide to Key Internet Technologies
November 30, 2024