Основные понятия
Репозиторий - это хранилище. В репозиториях хранятся файлы,
которые необходимо индексировать, история их изменений, настройки и пр.
информация. Доступ к такому репозиторию позволяет воссоздать структуру
индексируемых файлов на любой машине. Если проводить аналогию, то
мгновенное состояние всех индексируемых файлов в какой-то момент времени
- это их фото, а репозиторий - это фотоальбом, который содержит не
только сами фото, но и информацию о каждом из них, подписи, даты
создания, историю изменений и пр.
Staging area - это список файлов, индексируемых Git. В этот список можно добавлять любые файлы и папки. Использование механзима работы со Staging area
позволяет выборочно задавать файлы, которые необходимо индексировать.
Это может быть полезно, например, при веб-разработке, когда у нас есть
рабочая папка проекта на локальной машине и рабочая папка на
веб-сервере, которые необходимо периодически синхронизировать по ходу
разработки. Поскольку файлы настроек веб-приложения для сервера и для
локальной машины, как правило, отличаются, мы можем исключить их из Staging area, чтобы Git всегда игнорировал их изменения, и не смешивал друг с другом.
Ветка (Branch) - это ответвление в ходе разработки
проекта. Иногда, чтобы не испортить работающий проект и добавить в него
какую-то новую функцию, мы вручную делаем его копию и редактируем ее, не
трогая рабочую версию. Ветки в Git - это и есть, своего рода, копии текущего проекта. В каждом репозитории есть по крайней мере одна главная ветка - "master".
Можно создавать сколько угодно других веток, "растущих" из разных
коммитов. Стратегия такого ветвления может быть самой разной: можно
использовать уже обкатанную кем-то модель ветвления (см. ссылки в конце
статьи), или придумать свою. Например, для работы над каким-то багом
можно сдлеать специальную ветку, а после завершения работы - объединить
ее с основной. Механизм веток очень полезен при коллективной разработке.
Коммит (Commit) - это своего рода контрольная точка (то
самое "фото", о котором шла речь выше) текущего состояния всех
индексируемых файлов и папок. Каждый коммит имеет свой уникальный
идентификатор (который является SHA-суммой всех файлов) и, как
правило, текстовый комментарий, характеризующий изменения, внесенные в
индексируемые файлы. Каждая ветка состоит из коммитов. Коммиты делаются
в процессе работы над проектом - как правило, после завершения
какого-то этапа работы. Например, добавили новую функцию - сделали
коммит (сохранились), поправили какой-то баг - коммит, и т.д. В случае
чего, Git позволяет откатится до любой предыдущей версии проекта (до любого коммита). Поэтому, чем чаще делаются коммиты - тем лучше.