The process I've set up for my team allows us to get the best of both worlds, in my opinion, with almost no extra effort:
1. Create a branch and open a pull request. Nothing gets pushed directly to master.
2. After the pull request has been tested and reviewed, we Squash and Merge into master on GitHub with a single button click.
This way we end up with a single commit in master for each feature, bugfix, etc. There's also a link to the PR in the commit message where you can view the individual commits that were squashed as well as links to any related Jira issues.