Skip to content

Commit 54ccba6

Browse files
Merge pull request #5 from DevLoversTeam/develop
Develop
2 parents a9d04e7 + 3221cb3 commit 54ccba6

File tree

1 file changed

+275
-1
lines changed

1 file changed

+275
-1
lines changed

README.md

Lines changed: 275 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)