11.1 Ветки в гите
Работа с ветками branches в Git — это один из ключевых аспектов управления версиями, который позволяет параллельно вести несколько линий разработки в одном репозитории. Ветвление делает Git мощным инструментом для коллаборации, экспериментов и управления различными версиями проекта.
Вы можете рассматривать ветки в Git как папки, куда Git копирует ваш проект. У вас есть основная папка вашего проекта в вашем локальном репозитории — main. Git может создать копии этой папки, чтобы вы могли экспериментировать, не рискуя повредить основной, хорошо работающий код. Такие папки-копии называют ветками — branches.
Ветки — это альтернативные варианты кода. Предположим, что вы хотите что-то переделать в большом проекте или провести эксперимент, в котором вы не полностью уверены. Как бы вы поступили без Git?
Можно было бы скопировать проект в новую папку и попробовать в ней все поменять. Если результат вам понравится, то можно скопировать его в основную папку. Если не понравится — забыть о ней, ну или вообще удалить.
Давайте рассмотрим пример из жизни, например, написание книги:
- У вас есть рукопись книги (основная ветка).
- Вы решаете попробовать изменить концовку (создание новой ветки).
- Вы пишете новую концовку в отдельном документе (работа в новой ветке).
- Если новая концовка окажется лучше, вы замените старую в рукописи (слияние веток).
- Удаляете документ с новой концовкой (удаление ветки).
11.2 Создание веток
Создать ветку в PyCharm очень просто.
Введите имя ветки.
PyCharm сразу же отобразит имя вашей текущей ветки сверху в меню:
Что было до этого?
Ранее отображалось название вашей первой и основной ветки — main.
Теперь отображается test, что означает, что Git (под руководством PyCharm) не только создал новую ветку, но и сразу переключился на неё.
Добавим какой-нибудь код в файл main.py текущей ветки test и закомитим его.
11.3 Переключение между ветками
Шаг 1. Выбираем ветку.
Теперь давайте переключимся на нашу старую ветку. Кликните по верхнему меню, и что мы там видим?
Не путайтесь — всё очень просто:
Local — это список веток вашего локального git-репозитория; тут их две:
testmain
Remote — это ваш удалённый репозиторий, который находится на сервере GitHub. Мы туда отправили ваши изменения, но новой ветки там нет, что логично. Удалённый репозиторий носит имя origin, и в нём есть только ветка main.
Recent — это список имен последних веток, с которыми вы работали. Этот пункт добавлен в PyCharm для удобства и скорости.
Название origin/main справа от имени локального репозитория — это имя удалённого репозитория, с которым он сейчас синхронизирован, и куда будут отправляться изменения.
Шаг 2. — Выгружаем код ветки в текущую папку.
Шаг 3. Проверяем:.
У меня отображается ветка main и старый код.
11.4 Слияние веток
Давайте теперь попробуем объединить код из наших двух веток.
Шаг 1. Для начала добавим в наш проект еще один файл — init.py и напишем в нем какой-то код.
- Создаем файл
init.py - Пишем в нем код
print("Hello repo") - Коммитим файл.
Вот как выглядят два моих файла в ветке main:
Шаг 2. Слияние веток.
Вольем в нашу текущую ветку main изменения, которые были сделаны в ветке test.
Для этого также воспользуемся верхним меню и командой Merge ‘test’ into ‘main’.
Шаг 3. Проверяем результат:.
Проверяем:
- Сверху по-прежнему отображается ветка
main - У нас есть два файла:
init.pyиmain.py - Файл
main.pyсодержит код, который был добавлен в веткеtest.
11.5 Конфликты при слиянии
Иногда при слиянии веток возникают конфликты.
Если вы внесете изменения в один файл в разных ветках и попробуете их объединить, то может возникнуть конфликт.
Конфликт текстовых файлов
Git — это очень умная система, она понимает типы файлов. Если вы внесете изменения в разные места файлов, которые она считает текстовыми, то она просто перенесет изменения из одного файла в другой в нужное место, как бы это сделал человек.
Конфликт бинарных файлов
Но если вы внесете изменения в картинку или документ, Git не будет пытаться объединить их части в один файл, он просто предложит вам выбрать, какую версию файла вы хотите оставить в текущей ветке.
Ручное разрешение конфликтов:
Если вы внесете изменения в одно и то же место текстового файла, Git не сможет правильно объединить разные версии и предложит это сделать вам.
Вот как это может выглядеть:
Что вы тут видите:
- Слева содержимое файла
main.pyветкиmain - Справа содержимое файла
main.pyветкиtest - В середине PyCharm предлагает вам написать финальную версию кода (можно кликнуть по кнопкам
>>и<<, чтобы автоматически вставить изменения из одного из файлов).
Я принял вариант main и дописал код вручную. Вот что у меня получилось.
11.6 История изменений
Ещё из полезного и интересного: вы можете посмотреть историю изменений любого файла, кликнув по кнопке Show History. Есть два места, где она может находиться — найдите её.
Вот как выглядит история изменений у меня для файла main.py:
Пояснения:
- Слева вы видите историю изменений конкретного файла:
- Чем изменение новее, тем оно выше; чем старее — тем ниже.
- Здесь также отображается история слияния веток.
- Справа — изменения, которые были внесены в конкретном коммите.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ