Below is the workflow which I think is good for projects with git.
- Create a new issue.
- Create a new branch for the newly created issue.
- When the code changes are done then create a new pull request and start reviewing the changes.
- Tag the pull request with the issue so that when the pull request has been merged then the issue will be automatically closed.
- When the pull request has been approved and ready to merge then squash all the commits in the new branch and rebase it in master.
In this way the master branch commit history will be clean and easy to track the changes. For a single feature or bug there will be single commit in master branch.