Несколько других хороших ссылок на эти темы:

Я использую индекс в качестве контрольной точки .
Когда я собираюсь внести изменения, которые могут пойти не так, как надо, - когда я хочу исследовать какое-то направление, в котором я не уверен, смогу ли я довести до конца или даже буду ли это хорошая идея, например, концептуально требующий рефакторинг или изменение тип представления - я проверяю свою работу в индексе. Если это первое изменение, которое я сделал со времени моего последнего коммита, то я могу использовать локальный репозиторий в качестве контрольной точки, но часто у меня есть одно концептуальное изменение, которое я внедряю в виде набора маленьких шагов. Я хочу проверять точку после каждого шага, но сохраняю коммит, пока не вернусь к работающему, проверенному коду.
Ноты:
рабочее пространство является дерево каталогов (источник) файлы , которые можно просматривать и редактировать.
Индекс представляет собой один большой двоичный файл в <baseOfRepo>/.git/index, в котором перечислены все файлы в текущей ветви, их SHA1 контрольные суммы, метки времени и имя файла - это не другой каталог с копией файлов в нем.
Локальный репозиторий находится скрытый каталог ( .git) , включая objectsкаталог , содержащий все версии каждый файл в репозитории (местные филиалы и копию удаленных филиалов) в качестве сжатого файла «Blob».
Не думайте о четырех «дисках», представленных на рисунке выше, как об отдельных копиях файлов репо.

Они в основном называются ссылками для коммитов Git. Существует два основных типа ссылок: метки и заголовки.
- Теги - это фиксированные ссылки, которые отмечают определенный момент в истории, например, v2.6.29.
- Напротив, руководители всегда двигаются, чтобы отразить текущую позицию развития проекта.

(примечание: в комментировал по Тимо Huovinen , эти стрелки не то , что коммиты указывают на это, это порядок документооборота , в основном , демонстрирующая стрелки , как , 1 -> 2 -> 3 -> 4где 1это первое обязательство и 4последний)
Теперь мы знаем, что происходит в проекте.
Но чтобы знать, что происходит прямо здесь, прямо сейчас есть специальная ссылка под названием HEAD. Он служит двум основным целям:
- он сообщает Git, с какого коммита брать файлы при оформлении заказа, и
- он говорит Git, куда помещать новые коммиты, когда вы делаете коммит.
При запуске git checkout refон указывает HEADна ссылку, которую вы определили, и извлекает из нее файлы. При запуске git commitон создает новый объект фиксации, который становится дочерним по отношению к текущему HEAD. Обычно HEADуказывает на одну из головок, поэтому все работает просто отлично.

HEADэто коммит на кончике текущей ветки. Если вы только что извлекли ветку, то есть не имеют измененных файлов, то ее содержимое соответствует рабочему дереву. Как только вы что-то измените, оно больше не будет совпадать.