Well you should work with git branches.
Lets say master branch is for production usw. And your develop branch has the latest changes.
If you now need to fix a bug, but don't want to push all changes you've made in develop, simply checkout master and create a bugfix branch. Fix the stuff, test it and merge the bugfix into the master branch and push master to production.
This way you only changed what you need to. Don't forget you merge the bugfix branch then into your develop branch, so the bug is fixed there too.
In terms of deployment, I don't think there is an easy way just so upload specific files. Then you should just do it "by hand". But working with git branches, is definitly the cleaner way :)=