This is for keeping your branch up to date and always having a PR / MR with only one commit.  It is helpful if you use Oh-My-Zsh.

!! Squashing Your Branch

Checkout your branch

{{{
omz> gco $branch_name
zsh> git checkout $branch_name
}}}

Rebase your branch from master. {{$number_of_commits}} is displayed in GitLab at the top, where it says 

Overview: X, Commits: Y, Pipelines: Z, ...

The number you want is Y.

{{{
omz> grbi HEAD~5
zsh> git rebase -i HEAD~$number_of_commits
}}}

Force push your branch

{{{
omz> ggfl
zsh> git push --force-with-lease origin $current_branch
}}}

!! Update From Master

Time passes, commits get merged to master. You need to update your branch.

Checkout master 

{{{
omz> gcm
zsh> git checkout master
}}}

Pull

{{{
omz> gl
zsh> git pull
}}}

Checkout branch 

{{{
omz> gco $branch_name
zsh> git checkout $branch_name
}}}

Rebase from master 

{{{
omz> grbm
zsh> git rebase master
}}}

Handle conflicts, test, etc.

Force push \$current_branch to remote.

{{{
omz> ggfl
zsh> git push --force-with-lease origin $current_branch
}}}

!! Push to Master

Checkout master, merge feature branch into master, push master

{{{
omz> gcm
zsh> git checkout master
}}}

{{{
omz> gm $feature_branch
zsh> git merge $feature_branch
}}}

{{{
omz> ggp
zsh> git push origin master
}}}

----
[CategoryComputing.SCM.Git]