The major difference between Git and any other VCS (Subversion and friends included) is the way Git thinks about its data. Conceptually, most other systems store information as a list of file-based changes. These other systems (CVS, Subversion, Perforce, Bazaar, and so on) think of the information they store as a set of files and the changes made to each file over time (this is commonly described as delta-based version control).
[....]
vaut, а теперь прочитай внимательно. Все что сделал git это раздельное хранение изменений для каждого объекта системы. Он не стал от этого хранить полное состояние
Иван Шумов, покажите где написано что git хранит изменения (diff-ы)?
В каждом первом учебнике (и в официальной документации) написано что git хранит файлы. Файлы собираются в деревья. Коммиты это ссылка на дерево, родителя (родителей) и метаинформация. Никаких diff-ов в хранилище нет.
Иван Шумов, давайте не смешивать то как фактически хранятся данные и примитивы которыми оперирует git.
Коммиты не содержат патчей, они содержат полное состояние файлов и ссылки на предков.
Я не буду вам дальше пытать это доказать. Если вам это важно сами прочтете доки.
youmixx, просто осознай, что push не отправляет файлы. Он отправляет во внешнюю ветку коммиты, которые есть у тебя в локальной ветке, но отсутствуют во внешней ветке.
Если ты не проиндексировал файл и не закоммитил, то гит про него вообще не знает и следовательно никуда не отправит его состояние.