====== GIT ======
==== CHECK OUT REMOTE BRANCH ====
git switch --track origin/branch-name // 1. Creates a new local branch called branch-name
// 2. Set its upstream to origin/branch-name (the remote branch)
// 3. Move your working directory to that branch
---------------
==== DELETE REMOTE BRANCH ====
Your local Git keeps a list of remote branches under ''remote/origin/*'', you can see it with:
git branch -a
git fetch -p # Remove any stale references from your local list that no longer exist remotely
Delete remote branch:
git push origin --delete
---------------
==== ACCIDENTALLY COMITED ON MASTER ====
If changes were accidentally committed on ''master'' and we want to move them to a new branch:
git switch -c new-branch // Creates a new branch and switches to it.
git checkout master // Go back to master
# Cleaning master - Option 1
git reset --hard origin/master # This will delete the commit from master,
# but it still exists on new branch
# Resets to match the remote branch exactly.
# Used to discard all local commits since last fetch/pull
# Cleaning master - Option 2
git reset --hard HEAD~1 # Moves one commit back in local history.
# Used to undo the last local commit (or a few with HEAD~2)
# Bonus - local history in compact form
git log --oneline master
---------------
==== SQUASH ====
Scenario - you would like to "squash" several commits in your branch before submitting the merge request, so that all your changes look like a single commit.
**Step 1** - Find the **base commit** where your branch diverged from main
git merge-base master HEAD
**Step 2** - Start interactive rebase from that commit:
git rebase -i abc123
**Step 3** - In editor which will open, change all but the first pick to squash or just s:
pick abc123 My first commit
squash def456 My second commit
squash ghi789 My third commit
**Step 4** - Editor will open again for a commit message. Edit as you wish.
**Step 5** - Push with force:
git push --force
**Step 6** - When trying to pull after these changes, you might need to rebase:
git config pull.rebase true
git pull
==== CHANGE COMMIT MESSAGE ====
If the commit has been already pushed to the upstream, and it's the latest commit:
git commit --amend # edit the commit msg
git push --force