====== 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