I would avoid stashing in this case.
Push commits for individual file. Get those merged when approved.
The mindset needs to change to think in small units.
Many software teams work in a DEV/Master (or DEV/Release) branch model. Small changes are made, checked, and pushed to Dev. Using a tool like Gerrit as a gatekeeper between Git and Dev helps here; Gerrit 'holds' a patch in its own branch, allowing review with comments in a UI. Amendments to the commit can be made, pushed to Gerrit, then merged (to Dev) when complete.
Get a nightly CI set up, review the output. When that is acceptable for a release, merge to Master, tag, build from Master and release.