«Push» - это способ синхронизации репозиториев в Git, в вашем случае - синхронизация локального репо с одним заседанием на удаленном сервере.
Обновления репозитория происходят, когда вы фиксируете изменения (фактически, технически, когда вы «добавляете», но это становится глубже, чем необходимо). Когда вы делаете коммит, Git просто хранит информацию об изменениях дельты, которые вы сделали со времени последнего коммита (это не «дублирование» файлов). Но этот коммит находится только на вашей локальной машине, пока вы не нажмете. Когда вы нажимаете, Git просто синхронизирует обновления, сделанные вами в локальном репо, с репо на удаленном сервере.
Pro Git легко читается и прекрасно объясняет такие вещи: http://progit.org/book/