Skip to content

Instantly share code, notes, and snippets.

@n00neimp0rtant
Last active March 14, 2024 06:30
Show Gist options
  • Save n00neimp0rtant/9515611 to your computer and use it in GitHub Desktop.
Save n00neimp0rtant/9515611 to your computer and use it in GitHub Desktop.
simple squash without rebase
## within current branch, squashes all commits that are ahead of master down into one
## useful if you merged with upstream in the middle of your commits (rebase could get very ugly if this is the case)
## commit any working changes on branch "mybranchname", then...
git checkout master
git checkout -b mybranchname_temp
git merge --squash mybranchname
git commit -am "Message describing all squashed commits"
git branch -m mybranchname mybranchname_unsquashed
git branch -m mybranchname
## optional, not recommended if you want to keep the unsquashed history around for a bit longer
git branch -D mybranchname_unsquashed
## if squashing already-pushed commits...
git push --force
@dbcoderain
Copy link

Brilliant, thanks for this

@chengwhynot
Copy link

cool

@HelloBanksy
Copy link

Note that you might face the issue of setting tracking information as well (connecting your new squashed branch to your remote one). To handle this you will need to do:
git branch --set-upstream-to=origin/myfeaturebranch myfeaturebranch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment