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:
Пояснення:
- Зліва ви бачите історію змін конкретного файлу:
- Чим зміна новіша, тим вона вище; чим старіша — тим нижче.
- Тут також відображена історія злиття гілок.
- Справа — зміни, які були внесені в конкретному коміті.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ