I am occasionally on an expensive Internet connection and I would like to know (at least approximately) how much data will be pushed to the remote in a git push
You can find out pretty much exactly by running a similar bit of Bash to what Git will run internally when it creates the pack file to push:
$ echo $(git merge-base HEAD origin/master)..HEAD | git pack-objects --revs --thin --stdout -q | wc -c
This should output the byte-count of the pack file Git would send. Broken down:
# Find the common ancestor of HEAD and origin/master, and output a
# revision range (..) string to git pack-objects.
echo $(git merge-base HEAD origin/master)..HEAD
# Generate the pack file containing the revision range specified above, writing
# it to stdout.
git pack-objects --revs --thin --stdout -q
# Print the byte count of the file contents passed via stdin.
wc -c
This is conditional on doing a git fetch right before you push; if you don't, Git won't be able to find the common ancestor and will send the contents of your entire repository. See this answer for more info.