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.