I find squash merges are very useful when you work on a team with a lot of people. When somebody does work on their branch, and merges it back into main, it’s useful to treat that as a single semantic change from the perspective of the main branch.
Whatever commits happened during the development of the feature are typically not meaningful for other people. When I’m reviewing a feature I just want to see what the entirety of the change is. Likewise, if the feature introduces a problem, it’s much easier to back it out when it’s a single commit.
I find squash merges are very useful when you work on a team with a lot of people. When somebody does work on their branch, and merges it back into main, it’s useful to treat that as a single semantic change from the perspective of the main branch.
Whatever commits happened during the development of the feature are typically not meaningful for other people. When I’m reviewing a feature I just want to see what the entirety of the change is. Likewise, if the feature introduces a problem, it’s much easier to back it out when it’s a single commit.