1. 程式人生 > 其它 >remove the merge commit and squash the branch into a single commit in the mainline

remove the merge commit and squash the branch into a single commit in the mainline

Starting with the repo in the original state

To remove the merge commit and squash the branch into a single commit in the mainline

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:

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

Just do (replacing 5 with the SHA of the corresponding commit):

git rebase 5 master

And finally, to remove the branch entirely

Use this command (replacing C and D with the SHAs of the corresponding commits):

git rebase --onto C D~ master