I have a large project (several hundred MB), if I use a remote GIT repository, does GIT client push the entire directory even when you only make small change in a single fil
No, the git client and server negotiate a list of what objects have changed, and only those are sent. The only time you transmit more than is absolutely necessary is using a "dumb" HTTP server, and fetching a complete pack that contains more objects than are required on the client.
http://book.git-scm.com/7_transfer_protocols.html has some detail on the protocol at a technical level, and should give you the terminology to go further if you care about the how and why.