1) You can request a specific list of commits of a branch by index (e.g.
"1 to 30 <sha1 of branch>" would send the first 30 commits from the
server to the client of the branch "master"
If your Git server supports it, a partial solution is to do a partial
clone, e.g.:
git clone --filter=tree:0 --bare \
https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
And you can add --depth=10 if you want the last 10 commits in that
branch too:
git clone --filter=tree:0 --bare --depth=10 \
https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
This creates a partial clone with no local trees or blobs. If you're
just doing ancestry checks with "git merge-base", that should be
sufficient. (If you're doing anything else, trees and blobs will be
downloaded as Git needs them.)