Общие сведения о журнале Git

Git представляет историю в основном не так, как централизованные системы управления версиями (CVCS), такие как система управления версиями Team Foundation, Perforce или Subversion. Централизованные системы хранят отдельную историю для каждого файла в репозитории. Git сохраняет журнал в виде графа моментальных снимков всего репозитория. Эти моментальные снимки, называемые фиксациями в Git, могут иметь несколько родителей, создавая журнал, который выглядит как граф вместо прямой линии. Эта разница в истории невероятно важна и является основной причиной, по которой пользователи, знакомые с CVCS, находят Git запутанным.

Основы журнала фиксации

Начните с простого примера журнала: репозиторий с тремя линейными фиксациями.

Three commits in a line

Commit A является родительским элементом фиксации B, а фиксация B является родительским объектом фиксации C. Эта история выглядит очень похоже на CVCS. Стрелка, указывающая на фиксацию C, является ветвью. Ветви — это указатели на определенные фиксации, поэтому ветвление настолько упрощено и легко в Git.

Ключевое различие в Git по сравнению с CVCS заключается в том, что разработчик имеет собственную полную копию репозитория. Они должны синхронизировать локальный репозиторий с удаленный репозиторий, получив последние фиксации из удаленный репозиторий. Для этого они извлекают основную ветвь со следующей командой:

git pull origin main

Это объединяет все изменения из основной ветви в удаленный репозиторий, которые по умолчанию называются origin Git. Этот запрос принес одну новую фиксацию и основную ветвь в локальном репозитории перемещается к этой фиксации.

A fourth commit, D, is added to the line

Общие сведения о журнале ветвей

Теперь пришло время внести изменения в код. Обычно при работе с различными функциями параллельно работают несколько активных ветвей. Это резко контрастирует с CVCS, где новые ветви тяжелые и редко создаются. Первым шагом является проверка out в новую ветвь с помощью следующей команды:

git checkout -b cool-new-feature

Это сочетание двух команд:

  • git branch cool-new-feature Создание ветви
  • git checkout cool-new-feature Начало работы в ветви

Branch cool-new-feature is added

Теперь две ветви указывают на одну фиксацию. Предположим, что в ветви есть несколько изменений cool-new-feature в двух новых фиксациях, E и F.

Add commits to a branch

Фиксации доступны в cool-new-feature ветви, так как они были зафиксированы в этой ветви. Теперь, когда эта функция выполнена, ее необходимо объединить в основную ветвь. Для этого используйте следующую команду:

git merge cool-new-feature main

Merge a branch

Структура графа журнала становится видимой при слиянии. Git создает новую фиксацию при слиянии ветви в другую ветвь. Это фиксация слияния. Изменения не включены в эту фиксацию слияния, так как не было конфликтов. Если были конфликты, фиксация слияния будет включать изменения, необходимые для их устранения.

История в реальном мире

Ниже приведен пример истории Git, который более тесно похож на код в активной разработке в команде. Существует три человека, которые объединяют фиксации из своих собственных ветвей в main ветвь примерно в то же время.

Console log of git graph

Следующие шаги

Дополнительные сведения о работе с журналом Git в GitHub и Azure Repos или журнале журналов Git.