@@ -579,7 +579,281 @@ Merge дозволяє безпечно інтегрувати паралель
579579</details >
580580
581581<details >
582- <summary >21. ???</summary >
582+ <summary >21. Який Git workflow ви зазвичай використовуєте в роботі?</summary >
583+ 584+ #### GIT
585+ 586+ - Найчастіше використовую Git Flow / Feature Branch Workflow:
587+ 588+ - ` main ` — завжди стабільна продакшн-версія.
589+ 590+ - ` develop ` — інтеграційна гілка для нових фіч.
591+ 592+ - для задач створюю окрему ` feature ` .
593+ 594+ - після завершення — ` pull request ` → ` code review ` → ` merge у develop ` .
595+ 596+ - перед релізом створюється ` release ` , після тестів — ` merge у main ` + тег.
597+ 598+ - багфікси йдуть у ` hotfix ` від main.
599+ 600+ Цей процес дисциплінує, дає прозорість і контроль над релізами.
601+ 602+ </details >
603+ 604+ <details >
605+ <summary >22. Опишіть кроки створення нової гілки та її злиття в main.</summary >
606+ 607+ #### GIT
608+ 609+ 1 . Переконуюсь, що локальний main оновлений:
610+ 611+ ``` bash
612+ git checkout main
613+ git pull origin main
614+ ```
615+ 616+ 2 . Створюю нову гілку від main:
617+ 618+ ``` bash
619+ git checkout -b feature/my-task
620+ ```
621+ 622+ 3 . Працюю, комічу зміни:
623+ 624+ ``` bash
625+ git add .
626+ git commit -m " Implement feature X"
627+ ```
628+ 629+ 4 . Пушу гілку на remote:
630+ 631+ ``` bash
632+ git push origin feature/my-task
633+ ```
634+ 635+ 5 . Відкриваю Pull Request → проходить code review → CI.
636+ 637+ 6 . Мерджу в main (звичайно через squash або rebase, щоб історія була чистою).
638+ 639+ 7 . Видаляю feature-гілку локально і на remote.
640+ 641+ </details >
642+ 643+ <details >
644+ <summary >23. Що таке merge conflict у Git і як його вирішують?</summary >
645+ 646+ #### GIT
647+ 648+ - Merge conflict виникає, коли дві гілки змінюють один і той самий рядок коду
649+ або файл у несумісний спосіб, і Git не може автоматично об’єднати зміни.
650+ 651+ #### Рішення:
652+ 653+ 1 . Виконати merge/rebase → Git покаже конфліктні файли.
654+ 655+ 2 . Відкрити файл, знайти маркери <<<<<<<, =======, >>>>>>>.
656+ 657+ 3 . Вибрати або об’єднати потрібні зміни вручну.
658+ 659+ 4 . Позначити файл як вирішений:
660+ 661+ ``` bash
662+ git add < file>
663+ ```
664+ 665+ 5 . Завершити merge/rebase комітом:
666+ 667+ ``` bash
668+ git commit
669+ ```
670+ 671+ </details >
672+ 673+ <details >
674+ <summary >24. Що таке fast-forward merge у Git?</summary >
675+ 676+ #### GIT
677+ 678+ - Fast-forward merge — це злиття, коли гілка-ціль (наприклад main) не має нових
679+ комітів після відгалуження feature-гілки. Тоді Git просто пересуває вказівник
680+ main на останній коміт feature-гілки без створення додаткового merge-коміту.
681+ 682+ #### Приклад:
683+ 684+ ``` bash
685+ git checkout main
686+ git merge feature/my-task --ff
687+ ```
688+ 689+ Це "чисте" злиття без зайвих комітів.
690+ 691+ </details >
692+ 693+ <details >
694+ <summary >25. Що таке three-way merge у Git?</summary >
695+ 696+ #### GIT
697+ 698+ - Three-way merge — це злиття, коли Git використовує три точки для об’єднання:
699+ 700+ 1 . ` common ancestor ` (базовий коміт, від якого розійшлися гілки),
701+ 702+ 2 . ` HEAD ` (останній коміт у цільовій гілці, наприклад main),
703+ 704+ 3 . ` branch tip ` (останній коміт у зливаній гілці, наприклад feature).
705+ 706+ Git порівнює зміни відносно спільного предка й створює новий merge-коміт, що має
707+ двох батьків.
708+ 709+ Цей підхід застосовується, коли fast-forward неможливий (тобто в обох гілках є
710+ нові коміти).
711+ 712+ </details >
713+ 714+ <details >
715+ <summary >26. Які кроки виконати, щоб перебазувати (rebase) гілку в Git?</summary >
716+ 717+ #### GIT
718+ 719+ 1 . Перейти в свою гілку:
720+ 721+ ``` bash
722+ git checkout feature/my-task
723+ ```
724+ 725+ 2 . Виконати rebase на актуальну main:
726+ 727+ ``` bash
728+ git fetch origin git rebase origin/main
729+ ```
730+ 731+ 3 . Якщо є конфлікти — вирішити їх, додати файли:
732+ 733+ ``` bash
734+ git add < file> git rebase --continue
735+ ```
736+ 737+ 4 . Коли все готово — оновити remote (з форсом, бо історія переписана):
738+ 739+ ``` bash
740+ git push origin feature/my-task --force
741+ ```
742+ 743+ Rebase робить історію лінійною, на відміну від merge.
744+ 745+ </details >
746+ 747+ <details >
748+ <summary >27. Які плюси й мінуси rebase у порівнянні з merge?</summary >
749+ 750+ #### GIT
751+ 752+ ✅ ** Переваги rebase**
753+ 754+ - Лінійна, чиста історія без merge-комітів.
755+ 756+ - Зручніше читати git log, легше дебажити.
757+ 758+ - Кожен коміт виглядає так, ніби зроблений поверх останнього main.
759+ 760+ ❌ ** Недоліки rebase**
761+ 762+ - Переписує історію (особливо небезпечно для спільних гілок).
763+ 764+ - Потрібен --force push, що може зламати історію іншим.
765+ 766+ - Вимагає більшої дисципліни в команді.
767+ 768+ ✅ ** Переваги merge**
769+ 770+ - Зберігає повну історію розробки, без переписування.
771+ 772+ - Безпечний для командної роботи.
773+ 774+ - Простий у використанні.
775+ 776+ ❌ ** Недоліки merge**
777+ 778+ - Брудніший git log з великою кількістю merge-комітів.
779+ 780+ - Історію важче аналізувати.
781+ 782+ Загалом: merge — безпечніше для команд, rebase — краще для чистої історії.
783+ 784+ </details >
785+ 786+ <details >
787+ <summary >28. Для чого використовуються теги в Git?</summary >
788+ 789+ #### GIT
790+ 791+ - Теги в Git — це фіксовані маркери на певні коміти, зазвичай для позначення
792+ релізів (v1.0, v2.1).
793+ 794+ - ` Lightweight tag ` — просто вказівка на коміт, без додаткової інформації.
795+ 796+ - ` Annotated tag ` — зберігає автора, дату, повідомлення і може бути підписаний
797+ GPG.
798+ 799+ #### Теги зручні для:
800+ 801+ - Відстеження версій у продакшн.
802+ 803+ - Швидкого переходу на конкретний реліз:
804+ 805+ ``` bash
806+ git checkout v1.0
807+ ```
808+ 809+ - CI/CD для автоматичного деплою.
810+ 811+ </details >
812+ 813+ <details >
814+ <summary >29. Як скасувати коміт, який вже запушено на remote?</summary >
815+ 816+ #### GIT
817+ 818+ 1 . Якщо потрібно повністю видалити коміт (історія переписується, небезпечно для
819+ інших):
820+ 821+ ``` bash
822+ git reset --hard < коміт_до_потрібного>
823+ git push origin < гілка> --force
824+ ```
825+ 826+ 2 . Якщо потрібно зберегти історію, створивши "відкат" без перепису:
827+ 828+ ``` bash
829+ git revert < hash_коміту>
830+ git push origin < гілка>
831+ ```
832+ 833+ - ` reset --hard ` + ` force push ` змінює історію (небезпечно для спільних гілок).
834+ 835+ - ` revert ` створює новий коміт, що відміняє зміни — безпечніше для команд.
836+ 837+ </details >
838+ 839+ <details >
840+ <summary >30. Яке призначення головної гілки (main/master) у Git?</summary >
841+ 842+ #### GIT
843+ 844+ Головна гілка (main або раніше master) — це стабільна, завжди робоча версія
845+ проєкту, на яку орієнтуються всі інші гілки.
846+ 847+ - Від неї створюють feature-, release-, hotfix-гілки.
848+ 849+ - Вона слугує базою для релізів.
850+ 851+ - Зазвичай на ній запускається CI/CD і деплой в продакшн.
852+ 853+ </details >
854+ 855+ <details >
856+ <summary >31. ???</summary >
583857
584858#### GIT
585859
0 commit comments