Hello Awesome Developers
I know it had been a long gap since my last article, but I was prepping an even better thing for you all. Here I present the Git Cheatsheet for 2022. A must have/know guide for all developers/programmers.
Basic Concepts
main: default development branch
origin: default upstream repository
HEAD: current branch
HEAD^: parent of HEAD
HEAD~4: great-great grandparent of HEAD and so on
Setup
git config --global user.name "Mursal Furqan"
git config --global user.email "mursalfurqan@gmail.com"
- Start a project:
git init <directory> - Clone a Repo:
git clone <url>
Make a Change
- Add a file to staging:
git add <file> - Stage all files:
git add . - Commit all staged files to git with a message:
git commit -m "Message goes here" - Commit all changes made to tracked files and commit:
git commit -am "Message Goes Here"
Branches
- Add -r flag to show all remove branches. Add -a flag for all branches:
git branch - Create a new branch:
git branch <branch-name> - Switch to a new branch and update the working directory:
git checkout <branch> - Create a new branch and switch to it:
git checkout -b <new-branch> - Delete a merged branch:
git branch -d <branch> - Delete a branch, whether merged or now:
git branch -D <branch> - Add a tag to current commit (often used for new version releases):
git tag <tag-name>
Merging
Merge branch a into branch b. Add -no-ff option for no-fast-forward-merge
- Merge
git checkout b
git merge a
- Merge and squash all commits into one new commit:
git merge -- squash a
Rebasing
- Rebase feature branch onto main (to incorporate new changes made to main). Prevents unnecessary merge commits into feature, keeping history clean:
git checkout feature
git rebase main
- Interactively clean up a branch's commits before rebasing onto main:
git rebase -i main - Interactively rebase the last 3 commits on current branch:
git rebase -i Head~3
Undoing Things
- Move (&/or rename) a file & stage move:
git mv <existing_path> <new_path> - Remove a file from working directory & staging area, then stage the removal:
git rm <file> - Remove from staging area only:
git rm --cached <file> - View a Previous Commit (READ ONLY):
git checkout <commit_ID> - Create a new commit, reverting the changes from a specified commit:
git revert <commit_ID> - Go back to a previous commit & delete all commits ahead of it (revert is safer). Add --hard flag to also delete workspace changes (BE VERY CAREFUL):
git reset <commit_ID>
Review your Repository
- List new or modified files not yet committed:
git status - List commit history, with respective IDs:
git log --online - Show changes to unstaged files, add --cached option:
git diff - Show changes between two commit:
git diff commit1_ID commit2_ID
Stashing
- Store modified & staged changes. To include untracked files, add -u flag. For untracked & ignored files, add -a flag:
git stash - As above, but add a comment:
git stash save "comment" - Partial stash. Stash just a single file, a collection of files, or individual changes from within files:
git stash -p - List all stashes:
git stash list - Re-Apply the stash without deleting it:
git stash apply - Re-Apply the stash at index 2, then delete it from the stash list. Omit stash@(n) to pop the most recent stash:
git stash pop stash@(2) - Show the difference summary of stash 1. Pass the -p flag to see the full difference:
git stash show stash@(1) - Delete stash at index 1. Omit stash@(n) to delete last stash made:
git stash drop stash@(1) - Delete all stashes:
git stash clear
Synchronizing
- Add a remote Repo:
git remote add <alias> <url> - View all remote connections. Add -v flag to view URLs:
git remote - Rename a Connection:
git remote rename <old> <new> - Fetch all branches from remote repo (no merge):
git fetch <alias> - Fetch a specific branch:
git fetch <alias> <branch> - Fetch a remote repo's copy of the current branch, then merge:
git pull - Move (rebase) your local changes onto the top of new changes made to the remote repo (for clean, linear history):
git pull --rebase <alias> - Upload local content to remote repo:
git push <alias> - Upload to a branch (can then pull request):
git push <alias> <branch>
Top comments (0)