Starting with the repo in the original state
![Original repo history]()
To remove the merge commit and squash the branch into a single commit in the mainline
![Squashed commits, no merge commit]()
Use these commands (replacing 5 and 1 with the SHAs of the corresponding commits):
git checkout 5
git reset --soft 1
git commit --amend -m '1 2 3 4 5'
git rebase HEAD master
To retain a merge commit but squash the branch commits into one:
![Squashed commits, retained merge commit]()
Use these commands (replacing 5, 1 and C with the SHAs of the corresponding commits):
git checkout -b tempbranch 5
git reset --soft 1
git commit --amend -m '1 2 3 4 5'
git checkout C
git merge --no-ff tempbranch
git rebase HEAD master
To remove the merge commit and replace it with individual commits from the branch
![Branch moved into mainline, no merge commit]()
Just do (replacing 5 with the SHA of the corresponding commit):
git rebase 5 master
And finally, to remove the branch entirely
![Branch removed entirely]()
Use this command (replacing C and D with the SHAs of the corresponding commits):
git rebase --onto C D~ master