Ветки в git

Перейдите к следующему слайду, нажав кнопку Вправо

Разбираемся, что такое ветки и зачем они нужны

Подготовлено онлайн-курсом

https://dvmn.org

Как это всё выглядит?

Основная стабильная версия кода

А вот тут коммиты, которые его исправляют

А тут добавляем фичу

Вот тут мы начали исправлять баг

Зачем оно нужно?

Основная стабильная версия кода, которая всегда работает

Если программист накосячит вот тут - это не повлияет на основную версию кода, пока мы не "вольём" изменения в основную ветку

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

И как "вливать" код в основной?

На этом коммите мы создали зелёную ветку и начали там добавлять фичу

Здесь мы добавляем новый функционал к коду, не заботясь о том, чтобы переписывать всё  каждый раз, когда коммитят в основной ветке.

Эти коммиты не повлияют на то, что произойдёт в зелёной ветке. Их как будто не было.

Мы сделали "git merge" и добавили все изменения зелёной ветки к основной

Как это выглядит в жизни?

Написание сайта в разгаре, решаем добавить встроенный интернет-магазин

На сайте обновился дизайн

Добавили лицензию в репозиторий сайта

Всё ровно в том состоянии, как было до принятия решения о интернет-магазине

Добавили страницу с товарами

Оказалось, что весь сайт рухнул из-за новой страницы. Хорошо, что у нас есть стабильная версия! Поправили баг

Добавили метод оплаты

(см. дальше) ==>

Как это выглядит в жизни?

В этот момент в зелёной ветке нет лицензии и старый дизайн

В этот момент в синей ветке нет онлайн-магазина

К версии с новым дизайном мы добавили интернет-магазин. Но что, если всё сломается из-за несовместимых изменений?

Это мёрдж-коммит. В нём объединились изменения

Всё. Мёрдж-коммит всё сломал.

В Github Desktop:

В консольном git:

Нет, просто нужно поправить конфликт

В Github Desktop:

Эта строчка в master (основной ветке)

Эта строчка в origin/stable/2.1.x - ветке, с которой мы сливались

Выберите ту, которую хотите оставить, удалите лишнюю и "мусор" вокруг

(строчки, которыми git пытался подсказать вам, где искать конфликт)

Нет, просто нужно поправить конфликт

В Github Desktop:

Например, вы решили оставить эту. Поправьте конфликты везде, где они есть. Затем закоммитьте изменения мёрдж-коммитом. Поздравляем, вы слили ветки в одну!

Откуда берутся эти конфликты?

Поменял в файле django/db/backends/mysql/features.py 90-ую строчку

Git не знает, кому верить. Ему приходится спрашивать у вас.

Поменял в файле django/db/backends/mysql/features.py 90-ую строчку

И чью 90ую строчку добавлять?

Создать ветку

В Github Desktop:

В консольном git:

(master)$ git branch название-ветки

Сменить ветку

В Github Desktop:

В консольном git:

(master)$ git checkout название-ветки

(просто кликните на нужную)

Влить одну ветку в другую

(master)$ git merge куда-влить откуда-влить

В Github Desktop:

В консольном git:

Создано для онлайн-курса https://dvmn.org