Как сделать ветку гит

Основы ветвления и слияния

Давайте рассмотрим простой пример рабочего процесса, который может быть полезен в вашем проекте. Ваша работа построена так:

Вы работаете над сайтом.

Вы создаете ветку для новой статьи, которую вы пишете.

Вы работаете в этой ветке.

В этот момент вы получаете сообщение, что обнаружена критическая ошибка, требующая скорейшего исправления. Ваши действия:

Переключиться на основную ветку.

Создать ветку для добавления исправления.

После тестирования слить ветку содержащую исправление с основной веткой.

Переключиться назад в ту ветку, где вы пишете статью и продолжить работать.

Основы ветвления

Предположим, вы работаете над проектом и уже имеете несколько коммитов.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Это то же самое что и:

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Вы работаете над своим сайтом и делаете коммиты. Это приводит к тому, что ветка iss53 движется вперед, так как вы переключились на нее ранее ( HEAD указывает на нее).

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Но перед тем как сделать это — имейте в виду, что если рабочий каталог либо индекс содержат незафиксированные изменения, конфликтующие с веткой, на которую вы хотите переключиться, то Git не позволит переключить ветки. Лучше всего переключаться из чистого рабочего состояния проекта. Есть способы обойти это (припрятать изменения (stash) или добавить их в последний коммит (amend)), но об этом мы поговорим позже в разделе Припрятывание и очистка главы 7. Теперь предположим, что вы зафиксировали все свои изменения и можете переключиться на ветку master :

С этого момента ваш рабочий каталог имеет точно такой же вид, какой был перед началом работы над проблемой #53, и вы можете сосредоточиться на работе над исправлением. Важно запомнить: когда вы переключаете ветки, Git возвращает состояние рабочего каталога к тому виду, какой он имел в момент последнего коммита в эту ветку. Он добавляет, удаляет и изменяет файлы автоматически, чтобы состояние рабочего каталога соответствовало тому, когда был сделан последний коммит.

Теперь вы можете перейти к написанию исправления. Давайте создадим новую ветку для исправления, в которой будем работать, пока не закончим исправление.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Вы можете прогнать тесты, чтобы убедиться, что ваше исправление делает именно то, что нужно. И если это так — выполнить слияние ветки hotfix с веткой master для включения изменений в продукт. Это делается командой git merge :

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Теперь вы можете переключиться обратно на ветку iss53 и продолжить работу над проблемой #53:

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Основы слияния

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Вместо того, чтобы просто передвинуть указатель ветки вперёд, Git создаёт новый результирующий снимок трёхстороннего слияния, а затем автоматически делает коммит. Этот особый коммит называют коммитом слияния, так как у него более одного предка.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Теперь, когда изменения слиты, ветка iss53 больше не нужна. Вы можете закрыть задачу в системе отслеживания ошибок и удалить ветку:

Основные конфликты слияния

Git не создал коммит слияния автоматически. Он остановил процесс до тех пор, пока вы не разрешите конфликт. Чтобы в любой момент после появления конфликта увидеть, какие файлы не объединены, вы можете запустить git status :

Всё, где есть неразрешённые конфликты слияния, перечисляется как неслитое. В конфликтующие файлы Git добавляет специальные маркеры конфликтов, чтобы вы могли исправить их вручную. В вашем файле появился раздел, выглядящий примерно так:

Мы рассмотрим более продвинутые инструменты для разрешения сложных конфликтов слияния в разделе Продвинутое слияние главы 7.

Если это вас устраивает и вы убедились, что все файлы, где были конфликты, добавлены в индекс — выполните команду git commit для создания коммита слияния. Комментарий к коммиту слияния по умолчанию выглядит примерно так:

Если вы считаете, что коммит слияния требует дополнительных пояснений — опишите как были разрешены конфликты и почему были применены именно такие изменения, если это не очевидно.

Источник

Почти каждая система контроля версий (СКВ) в какой-то форме поддерживает ветвление. Используя ветвление, Вы отклоняетесь от основной линии разработки и продолжаете работу независимо от неё, не вмешиваясь в основную линию. Во многих СКВ создание веток — это очень затратный процесс, часто требующий создания новой копии каталога с исходным кодом, что может занять много времени для большого проекта.

Некоторые люди, говоря о модели ветвления Git, называют ее «киллер-фича», что выгодно выделяет Git на фоне остальных СКВ. Что в ней такого особенного? Ветвление Git очень легковесно: операция создания ветки выполняется почти мгновенно, переключение между ветками туда-сюда, обычно, также быстро. В отличие от многих других СКВ, Git поощряет процесс работы, при котором ветвление и слияние выполняется часто, даже по несколько раз в день. Понимание и владение этой функциональностью дает вам уникальный и мощный инструмент, который может полностью изменить привычный процесс разработки.

О ветвлении в двух словах

Для точного понимания механизма ветвлений, необходимо вернуться назад и изучить то, как Git хранит данные.

Как вы можете помнить из Что такое Git?, Git не хранит данные в виде последовательности изменений, он использует набор снимков (snapshot).

Когда вы делаете коммит, Git сохраняет его в виде объекта, который содержит указатель на снимок (snapshot) подготовленных данных. Этот объект так же содержит имя автора и email, сообщение и указатель на коммит или коммиты непосредственно предшествующие данному (его родителей): отсутствие родителя для первоначального коммита, один родитель для обычного коммита, и несколько родителей для результатов слияния двух и более веток.

Предположим, у вас есть каталог с тремя файлами и вы добавляете их все в индекс и создаёте коммит. Во время индексации вычисляется контрольная сумма каждого файла (SHA-1 как мы узнали из Что такое Git?), затем каждый файл сохраняется в репозиторий (Git называет такой файл блоб — большой бинарный объект), а контрольная сумма попадёт в индекс:

Ваш репозиторий Git теперь хранит пять объектов: три блоб объекта (по одному на каждый файл), объект дерева каталогов, содержащий список файлов и соответствующих им блобов, а так же объект коммита, содержащий метаданные и указатель на объект дерева каталогов.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Если вы сделаете изменения и создадите ещё один коммит, то он будет содержать указатель на предыдущий коммит.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Создание новой ветки

В результате создаётся новый указатель на текущий коммит.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Переключение веток

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Какой в этом смысл? Давайте сделаем ещё один коммит:

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Если выполнить команду git log прямо сейчас, то в её выводе только что созданная ветка «testing» фигурировать не будет.

Ветка никуда не исчезла; просто Git не знает, что именно она вас интересует, и выводит наиболее полезную по его мнению информацию. Другими словами, по умолчанию git log отобразит историю коммитов только для текущей ветки.

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

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

Давайте сделаем еще несколько изменений и создадим очередной коммит:

Как сделать ветку гит. Смотреть фото Как сделать ветку гит. Смотреть картинку Как сделать ветку гит. Картинка про Как сделать ветку гит. Фото Как сделать ветку гит

Ветка в Git — это простой файл, содержащий 40 символов контрольной суммы SHA-1 коммита, на который она указывает; поэтому операции с ветками являются дешёвыми с точки зрения потребления ресурсов или времени. Создание новой ветки в Git происходит так же быстро и просто как запись 41 байта в файл (40 знаков и перевод строки).

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

Давайте посмотрим, почему и вам имеет смысл делать так же.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *