@@ -1405,7 +1405,342 @@ git blame -L 10,20 app.js # лише рядки з 10 по 20
14051405</details >
14061406
14071407<details >
1408- <summary >51. ???</summary >
1408+ <summary >51. Що таке теги в Git і чим вони відрізняються від гілок?</summary >
1409+
1410+ #### GIT
1411+
1412+ - Тег — це фіксована позначка на конкретному коміті, зазвичай для релізів (v1.0,
1413+ v2.1).
1414+
1415+ - Гілка — це рухомий вказівник на останній коміт у лінії розробки, куди
1416+ додаються нові коміти.
1417+
1418+ #### Основні відмінності:
1419+
1420+ | Характеристика | Тег | Гілка |
1421+ | -------------- | ------------------ | ---------------------- |
1422+ | Рухливість | Нерухомий | Рухливий |
1423+ | Використання | Позначення релізів | Розробка нових функцій |
1424+ | Коміти | Не додаються нові | Додаються нові коміти |
1425+
1426+ #### Приклад створення тега:
1427+
1428+ ``` bash
1429+ git tag v1.0 git push origin v1.0
1430+ ```
1431+
1432+ </details >
1433+
1434+ <details >
1435+ <summary >52. Як у Git створювати, видаляти та пушити теги?</summary >
1436+
1437+ #### GIT
1438+
1439+ ** Створення тегів:**
1440+
1441+ - Lightweight тег:
1442+
1443+ ``` bash
1444+ git tag v1.0
1445+ ```
1446+
1447+ - Annotated тег (з повідомленням):
1448+
1449+ ``` bash
1450+ git tag -a v1.0 -m " Release version 1.0"
1451+ ```
1452+
1453+ ** Видалення тегів:**
1454+
1455+ - Локально:
1456+
1457+ ``` bash
1458+ git tag -d v1.0
1459+ ```
1460+
1461+ - Віддалено:
1462+
1463+ ``` bash
1464+ git push origin --delete tag v1.0
1465+ ```
1466+
1467+ ** Надсилання тегів на remote:**
1468+
1469+ - Один тег:
1470+
1471+ ``` bash
1472+ git push origin v1.0
1473+ ```
1474+
1475+ - Всі теги:
1476+
1477+ ``` bash
1478+ git push origin --tags
1479+ ```
1480+
1481+ </details >
1482+
1483+ <details >
1484+ <summary >53. Що таке семантичне версіонування і як його використовують у Git-тегах?</summary >
1485+
1486+ #### GIT
1487+
1488+ - Семантичне версіонування (SemVer) — це система нумерації версій у форматі
1489+ MAJOR.MINOR.PATCH, яка відображає характер змін у релізі:
1490+
1491+ - ` MAJOR ` — несумісні зміни API.
1492+
1493+ - ` MINOR ` — додані нові функції, сумісні з попередньою версією.
1494+
1495+ - ` PATCH ` — виправлення багів без зміни функціоналу.
1496+
1497+ - У Git-тегах використовують SemVer, щоб:
1498+
1499+ - Позначати релізи (v1.2.3).
1500+
1501+ - Легко відстежувати стабільність та сумісність версій.
1502+
1503+ - Інтегруватися з CI/CD для автоматичного деплою конкретних версій.
1504+
1505+ </details >
1506+
1507+ <details >
1508+ <summary >54. Як у Git перейти на конкретний тег?</summary >
1509+
1510+ #### GIT
1511+
1512+ - Теги самі по собі не є гілками, тому перехід на них робить репозиторій у
1513+ detached HEAD стані:
1514+
1515+ ``` bash
1516+ git checkout v1.0
1517+ ```
1518+
1519+ - Або з новішим синтаксисом:
1520+
1521+ ``` bash
1522+ git switch --detach v1.0
1523+ ```
1524+
1525+ 📌 У цьому режимі можна переглядати код, збирати чи тестувати, але нові коміти
1526+ не будуть прив’язані до жодної гілки.
1527+
1528+ - Щоб працювати далі з тегу як із гілки:
1529+
1530+ ``` bash
1531+ git checkout -b release-1.0 v1.0
1532+ ```
1533+
1534+ </details >
1535+
1536+ <details >
1537+ <summary >55. Як у Git створити реліз на основі тегу?</summary >
1538+
1539+ #### GIT
1540+
1541+ 1 . Створити тег на потрібному коміті:
1542+
1543+ ``` bash
1544+ git tag -a v1.0.0 -m " Release 1.0.0"
1545+ ```
1546+
1547+ 2 . Надіслати тег у віддалений репозиторій:
1548+
1549+ ``` bash
1550+ git push origin v1.0.0
1551+ ```
1552+
1553+ (або всі теги: git push origin --tags)
1554+
1555+ 3 . У системі керування кодом (GitHub/GitLab/Bitbucket) на основі цього тега
1556+ можна створити реліз:
1557+
1558+ - GitHub: вкладка Releases → Draft a new release → вибрати тег.
1559+
1560+ - Додати опис змін (changelog).
1561+
1562+ - Опублікувати реліз.
1563+
1564+ 📌 Реліз із тегу зручний для CI/CD — можна налаштувати автоматичне збирання та
1565+ деплой за певними тегами.
1566+
1567+ </details >
1568+
1569+ <details >
1570+ <summary >56. Що таке Git submodule і в яких випадках його доцільно використовувати?</summary >
1571+
1572+ #### GIT
1573+
1574+ ** Git submodule** — це механізм, що дозволяє вбудовувати один репозиторій у
1575+ інший як залежність. Він зберігає посилання на конкретний коміт іншого
1576+ репозиторію.
1577+
1578+ #### Використовують, коли:
1579+
1580+ - Є спільна бібліотека/модуль, який використовується в кількох проєктах.
1581+
1582+ - Потрібно зафіксувати залежність на певному коміті, а не останню версію.
1583+
1584+ - Хочеться уникнути копіювання коду між репозиторіями.
1585+
1586+ #### Приклад додавання підмодуля:
1587+
1588+ ``` bash
1589+ git submodule add https://github.com/example/lib.git libs/lib
1590+ git submodule update --init --recursive
1591+ ```
1592+
1593+ ❌ Мінуси: складніший workflow (оновлення вручну), можуть виникати проблеми при
1594+ клонуванні без --recursive.
1595+
1596+ </details >
1597+
1598+ <details >
1599+ <summary >57. Що таке Git hooks і для чого вони потрібні?</summary >
1600+
1601+ #### GIT
1602+
1603+ ** Git hooks** — це скрипти, які автоматично виконуються при певних подіях у
1604+ репозиторії (наприклад, перед комітом, після злиття, перед пушем). Вони
1605+ зберігаються у .git/hooks.
1606+
1607+ #### Використання:
1608+
1609+ - Перевірка стилю коду / запуск linter перед git commit (pre-commit).
1610+
1611+ - Заборона пушу у main напряму (pre-push).
1612+
1613+ - Автоматичне оновлення залежностей або документації після злиття (post-merge).
1614+
1615+ - Генерація changelog з повідомлень комітів.
1616+
1617+ #### Приклад: pre-commit для перевірки ESLint:
1618+
1619+ ``` bash
1620+ #! /bin/sh
1621+ npm run lint
1622+ if [ $? -ne 0 ]; then
1623+ echo " Lint errors found. Commit aborted."
1624+ exit 1
1625+ fi
1626+ ```
1627+
1628+ </details >
1629+
1630+ <details >
1631+ <summary >58. Як у Git об’єднати кілька комітів у один (squash)?</summary >
1632+
1633+ #### GIT
1634+
1635+ - ** Squash** роблять через інтерактивне перебазування:
1636+
1637+ ``` bash
1638+ git rebase -i HEAD~N
1639+ ```
1640+
1641+ - де N — кількість останніх комітів, які треба переглянути.
1642+
1643+ #### Далі в редакторі:
1644+
1645+ - залишаєш перший коміт як pick,
1646+
1647+ - для наступних змінюєш pick на squash (або s).
1648+
1649+ Після збереження — Git об’єднає коміти, запропонує відредагувати повідомлення.
1650+
1651+ #### Використання:
1652+
1653+ - очистка історії перед злиттям у main,
1654+
1655+ - зручний changelog,
1656+
1657+ - уникнення зайвих "дрібних" комітів.
1658+
1659+ </details >
1660+
1661+ <details >
1662+ <summary >59. Що таке git bisect і як із ним працювати?</summary >
1663+
1664+ #### GIT
1665+
1666+ - ` git bisect ` — це інструмент Git для бінарного пошуку коміту, який ввів баг.
1667+ Він автоматично звужує діапазон між ` “good” ` і ` “bad” ` комітами.
1668+
1669+ #### Використання:
1670+
1671+ 1 . Запустити:
1672+
1673+ ``` bash
1674+ git bisect start
1675+ git bisect bad # вказати коміт з багом
1676+ git bisect good < commit_hash> # вказати коміт, де все працювало
1677+ ```
1678+
1679+ 2 . Git переключається на середній коміт. Ви тестуєте і кажете Git:
1680+
1681+ ``` bash
1682+ git bisect good # якщо багу немає
1683+ git bisect bad # якщо баг є
1684+ ```
1685+
1686+ 3 . Повторює, доки не знайде проблемний коміт.
1687+
1688+ 4 . Завершення:
1689+
1690+ ``` bash
1691+ git bisect reset
1692+ ```
1693+
1694+ Використовується для швидкого знаходження помилок у великих історіях проєкту.
1695+
1696+ </details >
1697+
1698+ <details >
1699+ <summary >60. Як вручну вирішити конфлікт при злитті в Git?</summary >
1700+
1701+ #### GIT
1702+
1703+ 1 . Виконати злиття:
1704+
1705+ ``` bash
1706+ git merge feature-branch
1707+ ```
1708+
1709+ - Git зупиниться на конфліктах.
1710+
1711+ 2 . Відкрити файли з конфліктами — вони містять маркери:
1712+
1713+ ``` bash
1714+ <<< <<< < HEAD
1715+ код з поточної гілки
1716+ =======
1717+ код з feature-branch
1718+ >>>>>>> feature-branch
1719+ ```
1720+
1721+ 3 . Вручну вибрати або об’єднати потрібні зміни, видалити маркери.
1722+
1723+ 4 . Позначити файл як вирішений:
1724+
1725+ ``` bash
1726+ git add < file>
1727+ ```
1728+
1729+ 5 . Завершити злиття:
1730+
1731+ ``` bash
1732+ git commit
1733+ ```
1734+
1735+ (якщо Git не зробив commit автоматично).
1736+
1737+ Порада: можна використовувати інструменти для merge (наприклад, VS Code,
1738+ IntelliJ, Meld).
1739+
1740+ </details >
1741+
1742+ <details >
1743+ <summary >61. ???</summary >
14091744
14101745#### GIT
14111746
0 commit comments