Another way to squash all your commits is to reset the index to master:
git checkout yourBranch
git reset $(git merge-base master $(git branch –show-current))
git add -A
git commit -m “one commit on yourBranch”
This isn’t perfect as it implies you know from which branch “yourBranch” is coming from.
Note: finding that origin branch isn’t easy/possible with Git (the visual way is often the easiest, as seen here).
Note: git branch –show-current has been introduced with Git 2.22 (Q1 20219).
EDIT: you will need to use git push –force
Karlotcha Hoa adds in the comments:
For the reset, you can do
git reset $(git merge-base master $(git rev-parse –abbrev-ref HEAD))
[That] automatically uses the branch you are currently on.
And if you use that, you can also use an alias, as the command doesn’t rely on the branch name.
Checkout the branch for which you would like to squash all the commits into one commit. Let’s say it’s called feature_branch.
git checkout feature_branch
Step 1:
Do a soft reset of your origin/feature_branch with your local main branch (depending on your needs, you can reset with origin/main as well). This will reset all the extra commits in your feature_branch, but without changing any of your file changes locally.
git reset –soft main
Step 2:
Add all of the changes in your git repo directory, to the new commit that is going to be created. And commit the same with a message.
# Add files for the commit.
git add …
git commit -m “commit message goes here”