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
Course
Build your SaaS in 2 weeks - Start Now
Top comments (2)
Very well done! It's a really good reference to get people up to speed ☺
Thanks for the feedback! I'm glad you find it useful.