@@ -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