1. Що таке Git і яка його роль у розробці програмного забезпечення?
- Git — розподілена система контролю версій (VCS) для відстеження змін у коді.
-
Зберігання історії змін у проєкті.
-
Паралельна розробка в гілках (branches).
-
Об’єднання змін через merge або rebase.
-
Відновлення попередніх версій файлів.
-
Спільна робота команд над кодом через сервіси (GitHub, GitLab, Bitbucket).
Git дозволяє безпечно керувати кодом, відстежувати зміни та ефективно співпрацювати.
2. Чим Git відрізняється від інших систем контролю версій, наприклад, SVN або Mercurial?
-
Розподіленість: у Git кожен клон репозиторію містить повну історію, на відміну від централізованих VCS (SVN).
-
Швидкість: локальні операції (commit, diff, log) виконуються дуже швидко.
-
Гнучке керування гілками: lightweight branches і швидке злиття (merge/rebase).
-
Зберігання змін: Git зберігає снімки (snapshots) файлів, а не тільки дельти, як у SVN.
-
Широка інтеграція: популярність Git забезпечує підтримку в CI/CD, GitHub, GitLab, IDE.
-
Безпека: SHA-1 хешування гарантує цілісність історії.
Git ідеально підходить для сучасних командних workflow та open-source проєктів завдяки швидкості, гнучкості та надійності.
3. У чому відмінність між Git і GitHub?
-
Git — система контролю версій (VCS) для відстеження змін у коді локально або на будь-якому сервері.
-
GitHub — онлайн-сервіс для зберігання Git-репозиторіїв з веб-інтерфейсом, спільною роботою та додатковими функціями: pull requests, issues, CI/CD інтеграції.
-
Коротко: Git — інструмент для роботи з версіями коду, GitHub — платформа для хостингу та командної роботи з Git.
Можна використовувати Git без GitHub (локально) або GitHub безпосередньо для колаборації через веб.
4. Що таке репозиторій у Git і яка його роль?
-
Репозиторій (repository, repo) — це місце зберігання всього коду проєкту та історії змін.
-
Містить:
-
Файли проєкту (код, документацію, конфігурації).
-
Історію комітів (зміни з авторами та повідомленнями).
-
Гілки (branches) для паралельної розробки.
-
-
Може бути локальний (на вашому комп’ютері) або віддалений (GitHub, GitLab, Bitbucket).
Репозиторій дозволяє відстежувати зміни, працювати командою та повертатися до попередніх версій коду.
5. Що таке коміт (commit) у Git і для чого він використовується?
-
Коміт (commit) — це збереження знімка змін у репозиторії разом із повідомленням.
-
Містить:
-
Історію змін файлів (added, modified, deleted).
-
Авторство та дату зміни.
-
Унікальний SHA-1 хеш для ідентифікації.
-
-
Використовується для:
-
Відстеження прогресу проєкту.
-
Повернення до попередніх станів (git checkout, git revert).
-
Координації роботи в команді через pull/merge.
-
git add index.html
git commit -m "feat(html): Додаю базову структуру сторінки"
Коміти формують історію проєкту, яку можна аналізувати, відновлювати і об’єднувати.
6. Яка різниця між робочим каталогом (working directory), стейджингом (staging area/index) і репозиторієм (repository) у Git?
- Робочий каталог (Working Directory)
-
Це ваші файли на диску, які ви редагуєте.
-
Містить останню версію коду з Git + незбережені зміни.
- Проміжна область (Staging Area / Index)
-
Тимчасове місце для підготовки змін до коміту.
-
Ви обираєте, які файли/зміни будуть включені у наступний коміт.
-
Команди: git add
<file>
додає зміни до стейджу.
- Локальний репозиторій (Repository)
-
Збережена історія комітів у .git папці.
-
Містить всі коміти, гілки, теги, SHA-1 хеші.
-
Команди: git commit переносить зміни зі стейджу у репозиторій.
Working Directory -> git add -> Staging Area -> git commit -> Repository
Ця модель дозволяє гнучко контролювати, які зміни зберігати, і робити чисту історію комітів.
7. Що таке розгалуження (branching) у Git і чому воно важливе?
-
Розгалуження (branch) — це окрема лінія розробки в репозиторії, яка дозволяє працювати над новими функціями, виправленнями або експериментами, не зачіпаючи основну гілку (main/master).
-
Важливість:
-
Паралельна робота кількох розробників.
-
Безпечне тестування нових фіч.
-
Легка інтеграція через merge або rebase.
-
Чистіша історія комітів і контроль над змінами.
-
git branch feature-login
git checkout feature-login
Branching — основа сучасних workflow (Git Flow, GitHub Flow) для командної розробки.
8. Що таке HEAD у Git і яка його роль?
-
HEAD — це поточний вказівник на коміт, з яким ви зараз працюєте.
-
Зазвичай HEAD показує на гілку, а гілка — на останній коміт.
-
Використовується для:
-
Відстеження, де ви зараз перебуваєте в історії комітів.
-
Перемикання гілок (git checkout
<branch>
) або комітів (git checkout<commit>
).
-
-
Можливі стани HEAD:
-
Normal — вказує на гілку.
-
Detached HEAD — тимчасово вказує на конкретний коміт, не на гілку.
-
git checkout feature-login
# HEAD тепер вказує на гілку feature-login
HEAD — ключовий концепт для навігації по історії Git і управління комітами.
9. Що таке операція clone у Git і для чого вона використовується?
-
git clone
— створює повну копію віддаленого репозиторію на вашому локальному комп’ютері. -
Копія містить:
-
Усі файли проєкту.
-
Історію комітів.
-
Всі гілки та теги.
-
-
Використовується для:
-
Початку роботи над існуючим проєктом.
-
Спільної роботи команди через GitHub, GitLab або інші сервери.
-
git clone https://github.com/user/repo.git
Результат: локальний репозиторій, готовий для комітів, гілок і синхронізації з віддаленим сервером.
10. Як Git зберігає дані про проєкт і його історію змін?
-
Git зберігає снімки (snapshots), а не просто дельти файлів.
-
Кожен коміт — це SHA-1 хеш з:
-
Посиланням на попередній коміт.
-
Змінами файлів (знімком дерева).
-
Автором і повідомленням коміту.
-
-
Структура зберігання:
-
Blob
— вміст файлів. -
Tree
— каталог файлів та папок. -
Commit
— вказує на tree і попередній коміт.
-
-
Папка
.git
містить всі об’єкти і метадані, що дозволяє повністю відтворити історію проєкту.
👉 Така модель робить Git швидким, надійним і дозволяє ефективно працювати з гілками та злиттями.
11. Як ініціалізувати новий репозиторій Git?
- Використати команду:
git init
-
Вона створює приховану папку .git у поточному каталозі, де зберігатиметься історія комітів, гілки та конфігурація.
-
Далі треба додати файли й зробити перший коміт:
git add .
git commit -m "Initial commit"
Після git init каталог стає повноцінним Git-репозиторієм.
12. Для чого використовується команда git status?
-
Показує поточний стан робочого каталогу та індексу (staging area).
-
Інформує про:
-
Які файли змінені, але ще не додані.
-
Які файли вже в індексі та підуть у наступний коміт.
-
Які файли не відслідковуються.
-
Поточну гілку та її відставання/випередження відносно remote.
-
git status
Дає зрозуміти, що саме буде закомічено, а що ще потребує git add.
13. Яке призначення команди git add?
-
git add
додає зміни з робочого каталогу у staging area (індекс). -
Це підготовчий етап перед комітом.
-
Можна додавати окремі файли або всі зміни.
git add file.txt # додає конкретний файл
git add . # додає всі зміни в поточному каталозі
git add -p # додає зміни частинами (interactive)
Сам git add
ще не зберігає зміни в історії — тільки позначає їх для наступного
git commit
.
14. Яким чином створюється новий коміт у Git?
- Спочатку додати зміни у staging area:
git add .
- Потім створити коміт:
git commit -m "Опис змін"
-
Ключ -m додає повідомлення коміту.
-
Якщо його не вказати — відкриється редактор для введення повідомлення.
-
Коміт зберігає знімок (snapshot) поточного стану індексу в історії репозиторію.
Рекомендується писати короткі й зрозумілі повідомлення, щоб легко відстежувати зміни.
15. Які дані зберігає об’єкт коміту в Git?
-
Об’єкт коміту містить:
-
Хеш (SHA-1/SHA-256) — унікальний ідентифікатор.
-
Посилання на tree-об’єкт (структура файлів і папок на момент коміту).
-
Посилання на parent-коміти (зв’язок в історії, може бути кілька у merge).
-
Автор (ім’я, email, час створення).
-
Комітер (той, хто зафіксував, може відрізнятися від автора).
-
Commit message (опис змін).
-
Таким чином Git зберігає не файли, а знімки стану + метадані, що дозволяє легко відновлювати і порівнювати історію.
16. Яка різниця між командами git push і git fetch?
-
git push
— відправляє локальні коміти у віддалений репозиторій (оновлює remote-branch). -
git fetch
— отримує нові дані з віддаленого репозиторію, але не зливає їх у локальну гілку (оновлює тільки refs/remotes).
-
push
= викласти свої зміни. -
fetch
= завантажити чужі зміни для перегляду/злиття.
17. Яке призначення команди git pull?
-
git pull
=git fetch
+git merge
(абоrebase
, якщо вказано опцію). -
Вона завантажує останні зміни з віддаленого репозиторію і одразу інтегрує їх у поточну гілку.
-
Використовується для синхронізації локальної гілки з remote.
git pull origin main
- Отримає оновлення з origin/main і зіллє їх у вашу локальну main.
Якщо потрібен лише перегляд змін без злиття — краще використовувати git fetch.
18. Яке призначення та варіанти використання команди git branch?
git branch
керує гілками в репозиторії. Основні сценарії:
- Перегляд усіх гілок:
git branch
- Створення нової гілки:
git branch feature/login
- Видалення гілки (локально):
git branch -d feature/login # безпечне (якщо змерджено) git branch -D
feature/login # примусове
- Перейменування гілки:
git branch -m old-name new-name
- Перегляд віддалених гілок:
git branch -r
Важливо: git branch
не перемикає гілки, а тільки створює/керує. Для
перемикання використовується git checkout
або git switch
.
19. Як використовувати git checkout для перемикання між гілками?
- Команда
git checkout <branch>
змінює поточну гілку на вказану, оновлюючи робочий каталог до стану цієї гілки.
git checkout feature/login
- Тепер HEAD вказує на feature/login, і всі файли відображають її стан.
Створення нової гілки та одночасне перемикання:
git checkout -b feature/signup
- Перевага: швидко працювати з різними гілками без втрати змін (якщо вони закомічені або у стейджі).
В сучасних workflow рекомендують git switch
для перемикання гілок
(git switch feature/login
) — більш інтуїтивно.
20. Для чого використовується команда git merge?
-
git merge <branch>
об’єднує зміни з іншої гілки у поточну. -
Застосовується для інтеграції роботи над фічами або виправленнями в основну гілку (main/develop).
-
Fast-forward
— просто переміщує вказівник гілки, якщо історія лінійна. -
Three-way merge
— створює новий коміт злиття, якщо гілки розходяться.
git checkout main git merge feature/login
- Після цього всі зміни з feature/login будуть в main.
Merge дозволяє безпечно інтегрувати паралельні гілки без втрати історії.
21. Який Git workflow ви зазвичай використовуєте в роботі?
-
Найчастіше використовую Git Flow / Feature Branch Workflow:
-
main
— завжди стабільна продакшн-версія. -
develop
— інтеграційна гілка для нових фіч. -
для задач створюю окрему
feature
. -
після завершення —
pull request
→code review
→merge у develop
. -
перед релізом створюється
release
, після тестів —merge у main
+ тег. -
багфікси йдуть у
hotfix
від main.
-
Цей процес дисциплінує, дає прозорість і контроль над релізами.
22. Опишіть кроки створення нової гілки та її злиття в main.
- Переконуюсь, що локальний main оновлений:
git checkout main
git pull origin main
- Створюю нову гілку від main:
git checkout -b feature/my-task
- Працюю, комічу зміни:
git add .
git commit -m "Implement feature X"
- Пушу гілку на remote:
git push origin feature/my-task
-
Відкриваю Pull Request → проходить code review → CI.
-
Мерджу в main (звичайно через squash або rebase, щоб історія була чистою).
-
Видаляю feature-гілку локально і на remote.
23. Що таке merge conflict у Git і як його вирішують?
- Merge conflict виникає, коли дві гілки змінюють один і той самий рядок коду або файл у несумісний спосіб, і Git не може автоматично об’єднати зміни.
-
Виконати merge/rebase → Git покаже конфліктні файли.
-
Відкрити файл, знайти маркери <<<<<<<, =======, >>>>>>>.
-
Вибрати або об’єднати потрібні зміни вручну.
-
Позначити файл як вирішений:
git add <file>
- Завершити merge/rebase комітом:
git commit
24. Що таке fast-forward merge у Git?
- Fast-forward merge — це злиття, коли гілка-ціль (наприклад main) не має нових комітів після відгалуження feature-гілки. Тоді Git просто пересуває вказівник main на останній коміт feature-гілки без створення додаткового merge-коміту.
git checkout main
git merge feature/my-task --ff
Це "чисте" злиття без зайвих комітів.
25. Що таке three-way merge у Git?
- Three-way merge — це злиття, коли Git використовує три точки для об’єднання:
-
common ancestor
(базовий коміт, від якого розійшлися гілки), -
HEAD
(останній коміт у цільовій гілці, наприклад main), -
branch tip
(останній коміт у зливаній гілці, наприклад feature).
Git порівнює зміни відносно спільного предка й створює новий merge-коміт, що має двох батьків.
Цей підхід застосовується, коли fast-forward неможливий (тобто в обох гілках є нові коміти).
26. Які кроки виконати, щоб перебазувати (rebase) гілку в Git?
- Перейти в свою гілку:
git checkout feature/my-task
- Виконати rebase на актуальну main:
git fetch origin git rebase origin/main
- Якщо є конфлікти — вирішити їх, додати файли:
git add <file> git rebase --continue
- Коли все готово — оновити remote (з форсом, бо історія переписана):
git push origin feature/my-task --force
Rebase робить історію лінійною, на відміну від merge.
27. Які плюси й мінуси rebase у порівнянні з merge?
✅ Переваги rebase
-
Лінійна, чиста історія без merge-комітів.
-
Зручніше читати git log, легше дебажити.
-
Кожен коміт виглядає так, ніби зроблений поверх останнього main.
❌ Недоліки rebase
-
Переписує історію (особливо небезпечно для спільних гілок).
-
Потрібен --force push, що може зламати історію іншим.
-
Вимагає більшої дисципліни в команді.
✅ Переваги merge
-
Зберігає повну історію розробки, без переписування.
-
Безпечний для командної роботи.
-
Простий у використанні.
❌ Недоліки merge
-
Брудніший git log з великою кількістю merge-комітів.
-
Історію важче аналізувати.
Загалом: merge — безпечніше для команд, rebase — краще для чистої історії.
28. Для чого використовуються теги в Git?
-
Теги в Git — це фіксовані маркери на певні коміти, зазвичай для позначення релізів (v1.0, v2.1).
-
Lightweight tag
— просто вказівка на коміт, без додаткової інформації. -
Annotated tag
— зберігає автора, дату, повідомлення і може бути підписаний GPG.
-
-
Відстеження версій у продакшн.
-
Швидкого переходу на конкретний реліз:
git checkout v1.0
- CI/CD для автоматичного деплою.
29. Як скасувати коміт, який вже запушено на remote?
- Якщо потрібно повністю видалити коміт (історія переписується, небезпечно для інших):
git reset --hard <коміт_до_потрібного>
git push origin <гілка> --force
- Якщо потрібно зберегти історію, створивши "відкат" без перепису:
git revert <hash_коміту>
git push origin <гілка>
-
reset --hard
+force push
змінює історію (небезпечно для спільних гілок). -
revert
створює новий коміт, що відміняє зміни — безпечніше для команд.
30. Яке призначення головної гілки (main/master) у Git?
Головна гілка (main або раніше master) — це стабільна, завжди робоча версія проєкту, на яку орієнтуються всі інші гілки.
-
Від неї створюють feature-, release-, hotfix-гілки.
-
Вона слугує базою для релізів.
-
Зазвичай на ній запускається CI/CD і деплой в продакшн.
31. Що таке розподілена система контролю версій і як Git реалізує цей підхід?
- Розподілена система контролю версій (DVCS) — це система, де кожен розробник має повну копію репозиторію з історією комітів, а не лише робочі файли.
Git функціонує як DVCS так:
-
Клонуючи репозиторій, отримуєш усю історію локально.
-
Коміти, гілки, теги створюються локально й не потребують підключення до сервера.
-
Синхронізація між розробниками відбувається через push/pull у віддалений репозиторій (наприклад, GitHub).
-
Це дає швидкість, автономність і можливість працювати офлайн.
32. Що таке Git Feature Branch Workflow і як він працює?
- Feature Branch Workflow — підхід, коли для кожної нової задачі чи фічі створюється окрема гілка:
-
Від main або develop відгалужується feature/*.
-
Розробка й коміти відбуваються тільки там.
-
Коли фіча готова → відкривається Pull Request.
-
Після code review і CI зміни вливаються назад у develop/main.
-
Feature-гілка видаляється.
Перевага: ізоляція змін, паралельна робота без конфліктів, чиста історія.
33. Що таке Gitflow Workflow і як він працює?
-
Gitflow — це модель роботи з Git із чіткими правилами для різних типів гілок:
-
main
→ завжди стабільна продакшн-версія. -
develop
→ інтеграційна гілка для активної розробки. -
feature/
→ створюються від develop, після завершення зливаються назад у develop. -
release/
→ відгалуження від develop для підготовки релізу, після тестів вливається в main і develop. -
hotfix/
→ відгалуження від main для термінових виправлень, потім зливається і в main, і в develop.
-
✅ Плюси: чітка структура, контрольована розробка і релізи. ❌ Мінуси: громіздкий процес для маленьких команд або continuous delivery.
34. Що таке Forking Workflow у Git і як він працює?
- Forking Workflow — це підхід, коли кожен розробник працює не з основним репозиторієм напряму, а зі своєю копією (fork).
-
Розробник робить fork головного репозиторію у своєму GitHub/GitLab.
-
Клонує свій fork локально й створює гілку для змін.
-
Після завершення роботи пушить у свій fork.
-
Відкриває Pull Request з власного fork у головний репозиторій.
-
Після рев’ю та схвалення зміни зливаються в upstream.
Використовується у великих open-source проєктах, де стороннім контриб’юторам не дають прямого доступу до основного репозиторію.
35. Що таке Centralized Workflow у Git і як він працює?
- Centralized Workflow — це модель, де є одна головна гілка (зазвичай main), і всі розробники працюють прямо в ній або створюють короткоживучі гілки тільки для малих задач.
-
Усі клонують один remote-репозиторій.
-
Розробники роблять зміни й одразу пушать у main.
-
Якщо є конфлікти — вирішують перед пушем.
📌 Це схоже на старі централізовані системи (SVN), але з перевагами Git (локальна історія, робота офлайн).
✅ Простий процес, мінімум гілок. ❌ Важко масштабувати в команді: часто виникають конфлікти, немає ізоляції фіч.
36. Що таке remote repository у Git і для чого він потрібен?
- Віддалений репозиторій (remote) — це версія Git-репозиторію, що зберігається на сервері (GitHub, GitLab, Bitbucket).
-
Спільна робота команди (push/pull змін).
-
Централізоване зберігання коду та історії.
-
Інтеграція з CI/CD.
git remote -v # переглянути підключені remote
git remote add origin URL # додати віддалений репозиторій
git push origin main # відправити зміни
git pull origin main # отримати зміни
37. Як змінити URL remote-репозиторію в Git?
- Для оновлення URL використовують команду:
git remote set-url origin <новий_URL>
- Перевірити зміни можна так:
git remote -v
- Або замінити remote повністю:
git remote remove origin
git remote add origin <новий_URL>
Використовується, наприклад, при переході з HTTPS на SSH чи зміні репозиторію на GitHub/GitLab.
38. Які команди використовуються, щоб синхронізувати локальний репозиторій з remote у Git?
- Отримати останні зміни з remote:
git fetch origin
- Об’єднати з локальною гілкою:
git pull origin main
- (еквівалент fetch + merge).
- Відправити свої зміни на remote:
git push origin main
Коротко: pull → підтягнути зміни, push → відправити свої.
39. Як видалити невикористані (застарілі) гілки локально й на remote у Git?
- Локально:
git branch -d branch_name # видалити вже злиту гілку
git branch -D branch_name # примусово видалити
- Віддалено:
git push origin --delete branch_name
- Очистити локальний список remote-гілок (які вже видалені на сервері):
git fetch --prune
Практика: після merge у main видаляємо feature-гілки, щоб не захаращувати репозиторій.
40. Які кроки потрібно виконати для вирішення merge conflict у Git?
- Спробувати злиття або rebase:
git merge feature/my-task
- Git повідомляє про конфлікти. Перевірити файли:
git status
- Відкрити конфліктні файли, знайти маркери:
<<<<<<< HEAD
...
=======
...
> > > > > > > feature/my-task
-
Вирішити конфлікт вручну (залишити потрібні зміни).
-
Позначити файли як вирішені:
git add <file>
- Продовжити merge/rebase:
git commit # якщо merge git rebase --continue # якщо rebase
- Перевірити, що все працює, і пушити зміни:
git push origin main
41. Для чого призначена команда git stash?
git stash
дозволяє тимчасово сховати незавершені зміни (modified/ staged файли) у локальному репозиторії, щоб переключитися на іншу гілку або виконати інші операції, не комітячи їх.
git stash # сховати зміни
git stash pop # повернути сховані зміни
git stash list # переглянути список схованих змін
Використовується, коли потрібно швидко переключитися на main для виправлення багу або pull останніх змін.
42. Як переглянути зміни у файлах, які ще не закомічені, або історію комітів у Git?
- Зміни в робочому каталозі (не staged):
git diff
- Зміни, які вже додані до staging area:
git diff --staged
- Історія комітів:
git log
- Коротка історія:
git log --oneline --graph --decorate --all
- Перегляд змін конкретного файлу:
git diff <file>
git log -p <file>
43. Чи можна застосувати зміни з Git stash, не видаляючи їх зі списку?
Так, для цього використовують команду:
git stash apply
-
Застосовує обрану сховану зміну до робочої гілки.
-
Не видаляє її зі списку stash.
Якщо потрібно одночасно застосувати і видалити зі списку, використовують:
git stash pop
44. Що робить команда git clean?
git clean
видаляє незатрековані файли та каталоги з робочого каталогу, тобто ті, що не відслідковуються Git.
git clean -n # показати, що буде видалено (dry-run)
git clean -f # видалити незатрековані файли
git clean -fd # видалити файли та каталоги
git clean -fx # видалити файли, включаючи ті, що в .gitignore
Використовується, щоб очистити робочий каталог перед збіркою або тестуванням, коли потрібен чистий стан.
45. Як видалити файл з локального робочого каталогу, але залишити його в репозиторії Git?
Для цього використовують команду:
git rm --cached <file>
-
Файл видаляється з індексу (staging area) і робочого каталогу локально.
-
Після коміту і пушу він залишиться в репозиторії, але більше не відслідковується Git.
Якщо потрібно залишити файл у робочому каталозі, але перестати відслідковувати:
git rm --cached <file>
git commit -m "Stop tracking file"
46. Як переглянути історію комітів у Git?
- Базовий перегляд:
git log
- Коротка форма:
git log --oneline
- Графічне відображення гілок:
git log --graph --oneline --decorate --all
- Перегляд змін у комітах:
git log -p git show <commit_hash>
- Фільтрація по файлу:
git log -- <file>
Використовується для аналізу історії, пошуку змін або перевірки, хто і коли зробив коміт.
47. Як знайти всі коміти певного автора у Git?
- Використовують команду git log з опцією --author:
git log --author="Ім'я або email автора"
- Додатково можна скоротити вихід у один рядок:
git log --author="Ім'я" --oneline
Так можна переглянути всі коміти конкретного розробника у проєкті.
48. Як переглянути зміни, внесені конкретним комітом у Git?
- Перегляд повних змін коміту:
git show <commit_hash>
- Короткий варіант:
git show --stat <commit_hash>
- Якщо потрібно переглянути зміни конкретного файлу в коміті:
git show <commit_hash> -- <file>
Використовується для аналізу, перевірки змін перед злиттям або дебагу.
49. Як переглянути список файлів, змінених у конкретному коміті Git?
- Використовують git show з параметром --name-only:
git show --name-only <commit_hash>
- Показує лише імена файлів, без diff.
- Або --name-status, щоб бачити статус змін (додано, змінено, видалено):
git show --name-status <commit_hash>
- Для перегляду diff разом із файлами:
git show <commit_hash>
Це корисно для швидкого огляду, що змінився в конкретному коміті без аналізу повного diff.
50. Що робить команда git blame у Git?
-
git blame <file>
показує хто і коли вніс кожен рядок у файлі.-
Для кожного рядка виводиться коміт, автор і дата.
-
Допомагає швидко знайти відповідального за зміни або зрозуміти історію рядка коду.
-
git blame app.js
git blame -L 10,20 app.js # лише рядки з 10 по 20
51. Що таке теги в Git і чим вони відрізняються від гілок?
-
Тег — це фіксована позначка на конкретному коміті, зазвичай для релізів (v1.0, v2.1).
-
Гілка — це рухомий вказівник на останній коміт у лінії розробки, куди додаються нові коміти.
Характеристика | Тег | Гілка |
---|---|---|
Рухливість | Нерухомий | Рухливий |
Використання | Позначення релізів | Розробка нових функцій |
Коміти | Не додаються нові | Додаються нові коміти |
git tag v1.0 git push origin v1.0
52. Як у Git створювати, видаляти та пушити теги?
Створення тегів:
- Lightweight тег:
git tag v1.0
- Annotated тег (з повідомленням):
git tag -a v1.0 -m "Release version 1.0"
Видалення тегів:
- Локально:
git tag -d v1.0
- Віддалено:
git push origin --delete tag v1.0
Надсилання тегів на remote:
- Один тег:
git push origin v1.0
- Всі теги:
git push origin --tags
53. Що таке семантичне версіонування і як його використовують у Git-тегах?
-
Семантичне версіонування (SemVer) — це система нумерації версій у форматі MAJOR.MINOR.PATCH, яка відображає характер змін у релізі:
-
MAJOR
— несумісні зміни API. -
MINOR
— додані нові функції, сумісні з попередньою версією. -
PATCH
— виправлення багів без зміни функціоналу.
-
-
У Git-тегах використовують SemVer, щоб:
-
Позначати релізи (v1.2.3).
-
Легко відстежувати стабільність та сумісність версій.
-
Інтегруватися з CI/CD для автоматичного деплою конкретних версій.
-
54. Як у Git перейти на конкретний тег?
- Теги самі по собі не є гілками, тому перехід на них робить репозиторій у detached HEAD стані:
git checkout v1.0
- Або з новішим синтаксисом:
git switch --detach v1.0
У цьому режимі можна переглядати код, збирати чи тестувати, але нові коміти не будуть прив’язані до жодної гілки.
- Щоб працювати далі з тегу як із гілки:
git checkout -b release-1.0 v1.0
55. Як у Git створити реліз на основі тегу?
- Створити тег на потрібному коміті:
git tag -a v1.0.0 -m "Release 1.0.0"
- Надіслати тег у віддалений репозиторій:
git push origin v1.0.0
(або всі теги: git push origin --tags)
-
У системі керування кодом (GitHub/GitLab/Bitbucket) на основі цього тега можна створити реліз:
-
GitHub: вкладка Releases → Draft a new release → вибрати тег.
-
Додати опис змін (changelog).
-
Опублікувати реліз.
-
Реліз із тегу зручний для CI/CD — можна налаштувати автоматичне збирання та деплой за певними тегами.
56. Що таке Git submodule і в яких випадках його доцільно використовувати?
Git submodule — це механізм, що дозволяє вбудовувати один репозиторій у інший як залежність. Він зберігає посилання на конкретний коміт іншого репозиторію.
-
Є спільна бібліотека/модуль, який використовується в кількох проєктах.
-
Потрібно зафіксувати залежність на певному коміті, а не останню версію.
-
Хочеться уникнути копіювання коду між репозиторіями.
git submodule add https://github.com/example/lib.git libs/lib
git submodule update --init --recursive
❌ Мінуси: складніший workflow (оновлення вручну), можуть виникати проблеми при клонуванні без --recursive.
57. Що таке Git hooks і для чого вони потрібні?
Git hooks — це скрипти, які автоматично виконуються при певних подіях у репозиторії (наприклад, перед комітом, після злиття, перед пушем). Вони зберігаються у .git/hooks.
-
Перевірка стилю коду / запуск linter перед git commit (pre-commit).
-
Заборона пушу у main напряму (pre-push).
-
Автоматичне оновлення залежностей або документації після злиття (post-merge).
-
Генерація changelog з повідомлень комітів.
#!/bin/sh
npm run lint
if [ $? -ne 0 ]; then
echo "Lint errors found. Commit aborted."
exit 1
fi
58. Як у Git об’єднати кілька комітів у один (squash)?
- Squash роблять через інтерактивне перебазування:
git rebase -i HEAD~N
- де N — кількість останніх комітів, які треба переглянути.
-
залишаєш перший коміт як pick,
-
для наступних змінюєш pick на squash (або s).
Після збереження — Git об’єднає коміти, запропонує відредагувати повідомлення.
-
очистка історії перед злиттям у main,
-
зручний changelog,
-
уникнення зайвих "дрібних" комітів.
59. Що таке git bisect і як із ним працювати?
git bisect
— це інструмент Git для бінарного пошуку коміту, який ввів баг. Він автоматично звужує діапазон між“good”
і“bad”
комітами.
- Запустити:
git bisect start
git bisect bad # вказати коміт з багом
git bisect good <commit_hash> # вказати коміт, де все працювало
- Git переключається на середній коміт. Ви тестуєте і кажете Git:
git bisect good # якщо багу немає
git bisect bad # якщо баг є
-
Повторює, доки не знайде проблемний коміт.
-
Завершення:
git bisect reset
Використовується для швидкого знаходження помилок у великих історіях проєкту.
60. Як вручну вирішити конфлікт при злитті в Git?
- Виконати злиття:
git merge feature-branch
- Git зупиниться на конфліктах.
- Відкрити файли з конфліктами — вони містять маркери:
<<<<<<< HEAD
код з поточної гілки
=======
код з feature-branch
>>>>>>> feature-branch
-
Вручну вибрати або об’єднати потрібні зміни, видалити маркери.
-
Позначити файл як вирішений:
git add <file>
- Завершити злиття:
git commit
(якщо Git не зробив commit автоматично).
Порада: можна використовувати інструменти для merge (наприклад, VS Code, IntelliJ, Meld).
61. Як налаштувати ім’я користувача та email у Git?
- Для глобальних налаштувань (усі репозиторії):
git config --global user.name "Ваше Ім’я"
git config --global user.email "ваш@email.com"
- Для конкретного репозиторію (тільки в поточному):
git config user.name "Ваше Ім’я"
git config user.email "ваш@email.com"
- Перевірка:
git config --list
Email важливий для зв’язку комітів з GitHub/GitLab профілем.
62. Які рівні конфігурації Git існують і яка їхня область дії?
- Git має три рівні конфігурації:
- System (/etc/gitconfig) – застосовується для всіх користувачів і всіх репозиторіїв на машині.
git config --system ...
- Global (~/.gitconfig або ~/.config/git/config) – застосовується для поточного користувача на всіх його репозиторіях.
git config --global ...
- Local (.git/config у корені репозиторію) – застосовується лише для цього репозиторію. Має найвищий пріоритет.
git config ...
Пріоритет: local > global > system.
63. Як у Git створити alias (псевдонім) для команди?
Псевдоніми додають через git config. Наприклад:
- Глобально (для всіх репозиторіїв):
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm "commit -m"
- У конкретному репозиторії:
git config alias.lg "log --oneline --graph --all --decorate"
Після цього можна виконувати, наприклад:
git st
git co main
git lg
Зберігаються псевдоніми у файлі ~/.gitconfig або .git/config.
64. Для чого використовується файл .gitignore у Git?
.gitignore
визначає, які файли й папки Git має ігнорувати — тобто не відстежувати і не додавати у коміти.
-
тимчасових файлів (логів, кешів, .DS_Store, thumbs.db);
-
залежностей (node_modules/, vendor/);
-
згенерованих артефактів (білди, coverage-звіти);
-
локальних конфігів (наприклад, .env).
Важливо: .gitignore не видаляє файли, які вже відстежуються Git, лише забороняє додавати нові.
65. Як налаштувати глобальний .gitignore, щоб ігнорувати файли у всіх репозиторіях?
- Створити глобальний файл, наприклад:
touch ~/.gitignore_global
- Додати в нього правила (наприклад, IDE, системні файли):
.DS_Store
Thumbs.db
node_modules/
*.log
- Прописати Git, щоб він його використовував:
git config --global core.excludesfile ~/.gitignore_global
- Перевірити:
git config --list | grep excludesfile
Тепер усі нові репозиторії автоматично ігноруватимуть ці файли.
66. Як налаштувати Git для підпису комітів GPG-ключем?
- Створити або імпортувати GPG-ключ
gpg --full-generate-key gpg --list-secret-keys --keyid-format=long
- Скопіювати GPG_KEY_ID.
- Сказати Git, який ключ використовувати
git config --global user.signingkey GPG_KEY_ID git config --global
commit.gpgsign true # підписувати всі коміти
- Опціонально — підписувати лише вибрані коміти
git commit -S -m "Signed commit"
- Для GitHub/GitLab
- Вивести публічний ключ:
gpg --armor --export GPG_KEY_ID
- Додати його в налаштування акаунта (GPG keys).
- Перевірка
git log --show-signature
- У VS Code потрібно додати в settings.json:
"git.enableCommitSigning": true
67. Які найпоширеніші практики безпеки при роботі з Git-репозиторіями?
-
SSH-ключі замість паролів – для автентифікації з віддаленими репозиторіями.
-
GPG-підпис комітів – гарантія авторства і цілісності коду.
-
.gitignore для секретів – не зберігати .env, ключі, паролі в репозиторії.
-
Сканування на секрети (наприклад, GitGuardian, TruffleHog) перед пушем.
-
Обмеження доступу – мінімальні права (read/write), захищені гілки (protected branches).
-
Pull Request review – код потрапляє в main тільки після рев’ю.
-
CI/CD з секретним сховищем (Vault, GitHub Actions Secrets) замість hardcode.
-
Регулярне оновлення залежностей – щоб уникнути вразливостей.
Головне правило: ніколи не зберігати у Git секретні дані у відкритому вигляді.
68. Які способи існують для зберігання конфіденційних даних у Git-репозиторії у зашифрованому вигляді?
-
git-crypt
– прозоре шифрування вибраних файлів у репозиторії (розшифровка тільки для користувачів із ключами). -
git-secre
t – базується на GPG, дозволяє шифрувати .env, ключі та інші секрети. -
SOPS (Mozilla SOPS)
– зручний інструмент для керування секретами (AES + інтеграція з AWS KMS, GCP KMS, HashiCorp Vault). -
BlackBox (StackExchange)
– управління зашифрованими файлами в репозиторіях. -
Зберігати секрети поза Git
– у менеджерах секретів (Vault, AWS Secrets Manager, Doppler), а в репозиторії залишати лише посилання/шаблони (.env.example).
📌 На практиці: для фронтенд/.NET проєкту зручніше або git-secret + GPG, або SOPS, якщо інфраструктура в AWS/GCP.
69. Які існують стратегії зберігання та керування обліковими даними (credentials) у Git?
- Credential helpers Git
-
cache
— тимчасове збереження у пам’яті. -
store
— збереження у відкритому вигляді у файлі (небезпечний варіант). -
manager
(Windows) абоosxkeychain
(macOS) — інтеграція з системним менеджером паролів.
- SSH-ключі
-
Основний безпечний метод для GitHub/GitLab.
-
Використання
ssh-agent
для зручності.
- Персональні токени доступу (PAT)
-
Альтернатива паролям (наприклад, для GitHub).
-
Краще зберігати через credential manager.
- GPG-підпис
- Для підтвердження авторства комітів, не для аутентифікації.
- Secrets Manager (AWS, Vault, Doppler і т.д.)
- Для CI/CD або автоматизації замість хардкоду.
📌 Найкраща практика: SSH-ключі для доступу + Credential Manager для зручності + Secrets Manager для CI/CD.
70. Які способи є для скасування доступу користувачу до Git-репозиторію?
- GitHub / GitLab / Bitbucket
-
Власник або адміністратор видаляє користувача з collaborators або з групи/команди.
-
Можна змінити права доступу (read → none).
- SSH-ключі
- Видалити публічний ключ користувача з налаштувань репозиторію або сервера.
- Персональні токени (PAT)
- Відкликати або видалити токен у налаштуваннях акаунта.
- CI/CD секрети
- Якщо користувач мав доступ до секретів (наприклад, у GitHub Actions), треба їх відкликати/оновити.
Загальний принцип: відкликати доступ на рівні платформи (GitHub/GitLab) + знеактивувати ключі/токени.
71. Як у Git знайти та відновити файл, який був видалений?
- Якщо файл ще не закомічений (видалений лише локально):
git checkout -- <file>
- Якщо файл видалено і закомічено:
- Знайти коміт, де файл існував:
git log -- <file>
- Відновити файл з того коміту:
git checkout <commit_hash> -- <file>
- Відновлення файлу з останнього коміту у поточній гілці:
git restore <file>
Порада: перед checkout або restore переконайтеся, що немає незбережених змін, щоб їх не перезаписати.
72. Що робити, якщо випадково закомітити секретні дані у Git-репозиторій?
- Негайно видалити файл із історії:
git rm --cached <file> # видалити з індексу, залишивши локально
echo "<file>" >> .gitignore
git commit -m "Remove sensitive file"
- Якщо дані вже запушені на remote:
- Використати
git filter-repo
(або старийgit filter-branch
) для повного видалення файлу з історії:
git filter-repo --path <file> --invert-paths
- Переписати історію у віддаленому репозиторії:
git push origin --force
- Оновити секрети:
- Змінити паролі, ключі API, токени, оскільки вони вже могли бути скомпрометовані.
- Додати файл у
.gitignore
для запобігання повторного коміту.
Порада: у команді попереджати колег і перевірити форки/клони, якщо дані були пушені.
73. Що таке detached HEAD у Git і як з ним працювати?
- Що це:
-
detached HEAD
— стан, коли Git не знаходиться на гілці, а вказує безпосередньо на конкретний коміт або тег. -
Коміти в такому стані не прив’язані до жодної гілки і можуть бути втрачені після переключення.
- Перехід у detached HEAD:
git checkout <commit_hash>
git switch --detach <tag_name>
- Робота у detached HEAD:
-
Можна змінювати код, робити коміти.
-
Щоб зберегти коміти, треба створити гілку:
git checkout -b new-branch
- Вихід без збереження комітів:
git checkout main
- Нові коміти будуть втрачені, якщо не створити гілку.
Використання: тестування старих комітів, перегляд тегів, експерименти без впливу на основну гілку.
74. Як у Git відновити втрачений або випадково видалений stash?
- Перевірка списку всіх stash:
git stash list
- Відновлення конкретного stash:
git stash apply <stash@{n}>
- Застосовує зміни, не видаляючи їх зі списку.
- Відновлення після випадкового видалення (git stash drop або pop):
- Знайти commit, який зберіг stash:
git fsck --no-reflogs | grep commit
- Потім застосувати його через:
git stash apply <commit_hash>
- Профілактика:
- Регулярно робити резервні копії важливих stash.
Порада: видалений stash не завжди повністю втрачено — Git зберігає об’єкти до очищення garbage collector.
75. Як змінити повідомлення останнього коміту у Git?
- Якщо коміт ще не запушений на remote:
git commit --amend -m "Нове повідомлення коміту"
- Якщо коміт вже запушений:
- Змінити локально:
git commit --amend -m "Нове повідомлення коміту"
- Примусово оновити remote:
git push --force
Порада: не робіть --force на загальнодоступній гілці, щоб не порушити історію для інших розробників.
76. Що таке Pull Request (PR) і як він працює у Git-платформах?
-
Pull Request — це запит на внесення змін з однієї гілки у іншу (зазвичай з feature-branch у main або develop) через Git-платформи: GitHub, GitLab, Bitbucket.
-
Як працює:
-
Розробник створює гілку та робить коміти.
-
Відправляє гілку на remote.
-
Створює PR у веб-інтерфейсі, додає опис змін та рев’юверів.
-
Команда переглядає код, залишає коментарі, може запустити CI/CD.
-
Після схвалення PR зливається (merge) у цільову гілку.
-
Контроль якості коду через рев’ю.
-
Історія обговорень та змін.
-
Автоматичні перевірки через CI/CD.
77. Як внести зміни в уже відкритий Pull Request?
- Перейти у гілку, на основі якої створено PR:
git checkout feature-branch
- Внести потрібні зміни та закомітити їх:
git add .
git commit -m "Updated changes for PR"
- Відправити зміни у віддалений репозиторій:
git push origin feature-branch
Git автоматично оновить Pull Request на платформі (GitHub/GitLab/Bitbucket) після пушу в ту ж гілку.
78. Що таке code review (перевірка коду) у контексті Git і як він працює?
-
Code review — це процес перевірки змін у коді іншими розробниками перед їх злиттям у основну гілку.
-
Зазвичай відбувається через Pull Request (PR) у Git-платформах: GitHub, GitLab, Bitbucket.
-
Розробник створює гілку та робить коміти.
-
Відкриває PR із детальним описом змін.
-
Рев’ювери перевіряють код: стиль, логіку, тестування, безпеку.
-
Залишають коментарі або запитують зміни.
-
Після схвалення PR зміни зливаються в основну гілку.
-
Покращує якість коду.
-
Виявляє баги та проблеми на ранньому етапі.
-
Підвищує знання команди про кодову базу.
79. Як вирішувати конфлікти в Pull Request перед злиттям у Git?
- Визначити конфлікти
- GitHub/GitLab позначає PR як “This branch has conflicts that must be resolved”.
- Оновити локальну гілку
git checkout feature-branch
git fetch origin
git merge origin/main # або target-branch
- Вирішити конфлікти вручну
- Відкрити файли з маркерами:
<<<<<<< HEAD
код main
=======
код feature-branch
>>>>>>> feature-branch
- Вибрати або об’єднати потрібні зміни, видалити маркери.
- Позначити вирішені файли
git add <file>
- Завершити злиття локально
git commit
- Оновити PR на remote
git push origin feature-branch
Порада: для фронтенд-проектів зручніше використовувати VS Code Merge Tool або Sourcetree/IntelliJ для візуального вирішення конфліктів.
80. У чому різниця між git pull і комбінацією git fetch + git merge?
git fetch
-
Завантажує всі зміни з віддаленого репозиторію у локальні remote-branch, але не змінює вашу поточну гілку.
-
Дозволяє переглянути зміни перед інтеграцією.
git merge
після fetch
-
Локально об’єднує зміни з remote-branch у поточну гілку.
-
Контролює процес злиття і конфлікти.
git pull
-
Це швидка команда, яка фактично робить git fetch + git merge в один крок.
-
Менш контрольований, бо merge відбувається автоматично.
-
git fetch
+git merge
→ безпечніше, дозволяє перевірити зміни перед злиттям. -
git pull
→ зручно, коли потрібно швидко синхронізуватися.
81. Які підходи використовують для роботи з великими файлами в Git?
- Git LFS (Large File Storage)
-
Зберігає великі файли (зображення, відео, бінарники) поза основним репозиторієм.
-
У Git зберігаються тільки посилання, а самі файли лежать у спеціальному сховищі.
- .gitignore
- Ігнорувати великі тимчасові чи згенеровані файли, які не потрібні в історії (наприклад, node_modules, build-артефакти).
- Артефакти CI/CD
- Замість зберігання бінарних файлів у репозиторії використовувати системи зберігання (S3, Nexus, Artifactory).
- Розбивка проєкту
- Виносити великі ресурси в окремі репозиторії чи підмодулі.
Для фронтенду найчастіше: Git LFS для картинок/відео або S3 bucket для build-артефактів.
82. Які техніки можна застосувати для підвищення продуктивності при роботі з великим репозиторієм Git?
- Shallow clone (--depth)
- Завантажувати тільки останні коміти, щоб зменшити обсяг історії.
- Sparse checkout / partial clone
- Клонувати тільки потрібні директорії або файли (git sparse-checkout).
- Git gc (garbage collection)
- Виконувати прибирання і оптимізацію об’єктів:
git gc --aggressive --prune=now
- Розбиття монорепозиторію
- Використання submodules чи subtree для ізоляції великих компонентів.
- Ігнорування непотрібних файлів
- Налаштувати .gitignore, щоб зменшити кількість відстежуваних файлів.
- Git LFS
- Використовувати для важких медіа- або бінарних файлів.
- CI/CD кешування
- Використовувати кеш (npm/yarn cache, Docker layers) замість зберігання артефактів у Git.
У реальних фронтенд-проєктах часто комбінують shallow clone + sparse checkout для швидких CI-білдів.
83. Що таке shallow clone у Git і коли доцільно його застосовувати?
Shallow clone — це клон репозиторію з обмеженою історією комітів. Виконується командою:
git clone --depth <N> <repo-url>
де <N>
— кількість останніх комітів, які потрібно завантажити.
-
значно швидше клонування;
-
менший розмір репозиторію;
-
корисно для CI/CD, де потрібен лише останній стан коду.
-
обмежена історія (неможливо повноцінно досліджувати старі коміти);
-
складніше працювати з перебазуванням і пошуком у глибокій історії.
Використовують, коли потрібен лише актуальний стан проєкту без повної історії (наприклад, білд на CI).
84. Які підходи можна застосувати для зменшення розміру репозиторію Git?
- Прибрати непотрібні файли з історії
- Використати git filter-repo (сучасний варіант git filter-branch):
git filter-repo --path <file> --invert-paths
- (видалить файл з усієї історії).
- Очистити великі файли у репозиторії
- Інтегрувати Git LFS для зберігання бінарників/медіа окремо.
- Запустити прибирання
git gc --aggressive --prune=now
- (стисне об’єкти й прибере сміття).
- Видалити старі гілки та теги
- Локально:
git branch -D <branch>
- Віддалено:
git push origin --delete <branch>
- Використовувати shallow clone (--depth 1) на CI/CD для швидших зборок, замість повного репо.
У реальних командах основний варіант — перенесення великих файлів у Git LFS + чистка історії filter-repo.
85. Що таке Git LFS і як ним користуватись?
Git LFS (Large File Storage) — це розширення Git для зберігання великих файлів (зображення, відео, бінарники) поза основною історією репозиторію. У Git зберігаються лише посилання (пойнтери) на ці файли, а самі дані лежать у спеціальному сховищі.
- Установлюємо:
git lfs install
- Відзначаємо типи файлів, які треба винести в LFS:
git lfs track "_.png" git lfs track "_.mp4"
- (створюється/оновлюється .gitattributes).
- Додаємо та комітимо як звичайні файли:
git add .gitattributes image.png
git commit -m "Add image with LFS"
git push origin main
-
репозиторій не роздувається;
-
швидше клонування й робота з історією;
-
зручно для мультимедіа або артефактів білду.
-
потрібна підтримка на стороні віддаленого репозиторію (GitHub, GitLab, Bitbucket підтримують, але є ліміти);
-
обмеження за розміром файлів/трафіку (особливо у безкоштовних планах).
Використовують тоді, коли в проєкті є важкі бінарні чи медіафайли, які часто оновлюються.
86. Як Git інтегрується в CI/CD-процеси?
Git є джерелом правди для коду, а CI/CD-системи (GitHub Actions, GitLab CI, Jenkins, Azure DevOps тощо) інтегруються з ним через події (hooks/webhooks).
-
Push / Pull Request / Merge → тригер для пайплайну.
-
CI/CD-система клонує або фетчить репозиторій.
-
Виконує кроки (білд, тести, лінтинг, деплой).
-
Зберігає артефакти, публікує результати, може створювати релізи з тегів.
-
GitHub Actions автоматично запускає воркфлоу при push чи pull_request.
-
GitLab CI використовує .gitlab-ci.yml, який описує пайплайни.
-
Jenkins може слухати webhooks від GitHub/GitLab і виконувати джоби.
-
Git дозволяє відслідковувати зміни й запускати пайплайни тільки для змінених частин коду.
-
Теги часто використовують для тригера релізних збірок.
-
Branching strategy (Gitflow, trunk-based) напряму впливає на структуру CI/CD.
Тобто Git — це тригер і джерело коду, а CI/CD — автоматизація всіх подальших процесів.
87. Як налаштовується автоматизоване розгортання (deployment) з використанням Git?
Автоматизоване розгортання з Git базується на інтеграції з CI/CD і подіях у репозиторії.
-
Push / merge у гілку (наприклад, main або release) → тригер для пайплайну.
-
CI/CD-система (GitHub Actions, GitLab CI, Jenkins, Azure DevOps):
-
клонує репозиторій (git clone або git fetch),
-
виконує білд (наприклад, npm install && npm run build для React),
-
запускає тести та лінтери,
-
створює артефакти (docker-образ, bundle).
- Деплой:
-
пуш Docker-образу в реєстр (ECR, Docker Hub);
-
деплой на сервер через SSH або оркестратор (Kubernetes, ECS, Heroku, Vercel, Netlify).
- Моніторинг та rollback: відслідковування успішності, можливість відкату на попередній тег/реліз.
-
git push origin main
→ GitHub Actions запускає воркфлоу, який деплоїть додаток на AWS S3 + CloudFront. -
git tag v1.0.0 && git push origin v1.0.0
→ CI/CD запускає релізний пайплайн (білд Docker + деплой у Kubernetes).
Головна ідея: Git — це тригер і контроль версій, а автоматизація виконується пайплайнами, що читають код і конфіг з репозиторію.
88. Як налаштувати правила захисту гілок у Git, щоб інтегрувати їх із CI/CD?
Призначення — захищені гілки (main, release) гарантують, що в продакшен не потраплять неякісні зміни.
-
Заборонити прямі пуші → зміни тільки через Pull Request.
-
Обов’язкові перевірки CI/CD перед злиттям:
-
білд має пройти успішно,
-
тести мають бути "green",
-
лінтери / форматтери виконані. (На GitHub це → Require status checks to pass before merging).
-
Обов’язковий code review: мінімум 1–2 схвалення перед merge.
-
Синхронізація з останнім main: PR має бути актуальним (без конфліктів).
-
Обов’язковий підпис комітів (GPG/SSO) — для безпеки.
-
Автоматичне тегування / реліз після злиття (наприклад, через GitHub Actions).
-
На GitHub:
-
Settings → Branches → Branch protection rules
-
Додати правило для main:
-
✅ Require pull request reviews
-
✅ Require status checks (CI pipeline)
-
✅ Require signed commits
-
✅ Require linear history (без merge-комітів, тільки squash/rebase)
-
-
Результат: розгортання тригериться лише після успішного проходження CI/CD, а у продакшен не потрапить "сирий" код.
89. Яку роль відіграють Git hooks (гачки) в автоматизації процесів?
- Git hooks — це скрипти, які автоматично запускаються на певні події Git (commit, push, merge тощо). Вони дозволяють автоматизувати дії прямо в робочому циклі розробки.
- Перевірка якості коду перед комітом
-
запуск лінтерів (ESLint, Prettier),
-
перевірка форматування,
-
блокування коміту з помилками.
- Автоматизація тестів
- pre-push може запускати unit / integration тести, щоб у віддалений репозиторій не потрапив "зламаний" код.
- Безпека
-
перевірка, чи немає у коміті секретів (ключів, паролів),
-
обов’язкове підписання комітів.
- Уніфікація процесів
-
автогенерація changelog,
-
оновлення документації,
-
форматування commit message за convention (наприклад, Conventional Commits).
На практиці часто використовують Husky (JavaScript) або lefthook (language-agnostic) для зручного менеджменту Git hooks.
90. Як Git використовується для відкату змін у разі невдалого деплою?
- Git робить відкат безпечним, оскільки кожен реліз — це фіксований коміт або тег. У випадку невдалого розгортання:
- Повернення до стабільної версії
- checkout на попередній тег/коміт:
git checkout v1.2.3
- деплой цього стану коду.
- Використання git revert
- створює новий коміт, що відміняє зміни проблемного:
git revert <commit_hash>
- CI/CD інтеграція
-
у пайплайні зазвичай деплої відбуваються з тегів або main/master.
-
можна швидко redeploy попереднього тегу без ручного втручання.
- Blue-Green / Canary деплоймент (залежить від інфраструктури, але Git виступає як джерело істини для коду).
Головна ідея: Git дозволяє миттєво відтворити будь-який попередній стан коду, що робить rollback контрольованим і передбачуваним.
91. Як налаштувати та інтегрувати Git у сучасне IDE для зручної роботи?
- Підтримка Git у IDE
-
Більшість IDE мають вбудовану підтримку Git:
-
VS Code
→ вбудований Source Control + розширення GitLens, Git Graph -
IntelliJ/WebStorm
→ інтегрований VCS -
Visual Studio
→ Team Explorer / Git Tools
-
- Налаштування репозиторію
-
Відкрити проєкт у IDE
-
Вказати шлях до локального репозиторію або клонувати з remote
-
Налаштувати глобальні параметри Git (ім’я, email)
- Основні інтегровані функції
-
Візуальна історія комітів, diff файлів
-
Створення, перемикання та видалення гілок
-
Commit / Stage / Push / Pull прямо з IDE
-
Можливість вирішення конфліктів merge через GUI
-
Підпис комітів GPG (якщо підтримується)
- Розширення та плагіни
-
GitLens (VS Code) – показ авторства рядків, історія змін
-
Git Graph – графічне відображення гілок
-
GitHub / GitLab плагіни для PR, Issues, CI/CD
Порада: інтеграція Git у IDE скорочує контекстні переключення і робить робочий процес швидшим, особливо для фронтенд-команд.
92. Які плюси та мінуси використання GUI для Git у порівнянні з командним рядком?
Переваги GUI для Git:
- Візуалізація історії та гілок
- Зручно бачити дерево комітів, злиття, конфлікти.
- Менше помилок у синтаксисі
- Не треба пам’ятати точні команди (merge, rebase, cherry-pick).
- Швидкий доступ до повторюваних дій
- Stage/unstage файли, створення гілок, PR, revert через кнопки.
- Інтеграція з IDE / CI/CD
- Відображення статусу тестів, PR, pipeline прямо в IDE.
Недоліки GUI:
- Обмежений контроль
- Деякі складні операції (rebase -i, filter-repo) зручні тільки в CLI.
- Може вводити в оману
- Не завжди видно, що реально відбувається під капотом (наприклад, fast-forward merge).
- Продуктивність
- Великі репозиторії можуть гальмувати в GUI.
- Залежність від інструменту
- Навчання нових інструментів + несумісність між різними GUI.
-
CLI
– повний контроль, необхідний для складних сценаріїв і скриптів. -
GUI
– зручність для швидкого перегляду історії, PR, простих merge/commit. -
Часто практикують комбінацію: CLI для критичних дій, GUI для щоденної роботи.
93. Які популярні плагіни та розширення використовують для інтеграції Git у IDE та редакторах коду?
Для VS Code:
-
GitLens – показ авторства рядків, історії комітів, гілок, інтеграція з PR.
-
Git Graph – графічне дерево гілок та комітів.
-
GitHub Pull Requests and Issues – управління PR та Issue прямо з редактора.
-
Git History – швидкий перегляд історії комітів.
-
Project Manager + Git Integration – зручна робота з кількома репозиторіями.
Для JetBrains IDE (WebStorm, IntelliJ, PhpStorm):
-
Вбудований VCS/Git – коміти, merge, rebase, stash, історія.
-
GitToolBox – розширена інформація про віддалені гілки, статус, auto-fetch.
-
Git Flow Integration – підтримка Gitflow без CLI.
Для Visual Studio:
-
Git Tools / Team Explorer – коміти, гілки, merge, stash.
-
GitHub Extension for Visual Studio – інтеграція з GitHub, PR, issues.
Для інших редакторів:
-
Sourcetree – окремий GUI для Git (розробка Atlassian).
-
Fork – легкий GUI-клієнт для Mac/Windows.
-
Tower – комерційний GUI для macOS/Windows.
Порада: у фронтенд-проєктах найчастіше використовують GitLens + Git Graph + GitHub PR у VS Code для швидкої та наочної роботи з Git.
94. Як вирішувати Git merge конфлікти за допомогою візуальних інструментів?
- Використання IDE (VS Code, WebStorm, IntelliJ)
-
Відкриваєте файли з конфліктами → IDE підсвічує зміни:
-
<<<<<<< HEAD – ваші зміни
-
======= – роздільник
-
feature-branch – зміни іншої гілки
-
-
Візуальні кнопки:
-
Accept Current Change – залишити вашу версію
-
Accept Incoming Change – взяти версію з іншої гілки
-
Accept Both Changes – об’єднати зміни
-
Compare Changes – переглянути різницю у зручному режимі side-by-side
-
- Використання спеціальних GUI-клієнтів
-
Sourcetree, Fork, GitKraken
-
Автоматично показують дерево конфліктів
-
Дозволяють drag-and-drop об’єднання змін
-
Після вирішення – кнопка Mark as Resolved
-
- Після вирішення
git add <resolved_file>
git commit # закомітити результат злиття
-
Візуальні інструменти особливо зручні для фронтенду, де конфлікти часто виникають у JSX, CSS, JSON.
-
Для складних сценаріїв (великий обсяг коду) IDE + GUI клієнт дають максимум наочності.
95. Що таке Git bridge і яку роль він відіграє у взаємодії з іншими системами контролю версій?
-
Git bridge — це механізм або набір інструментів, що дозволяє інтегрувати Git з іншими системами контролю версій (SVN, Perforce, Mercurial).
-
Він забезпечує двосторонню синхронізацію: можна працювати у Git, а зміни автоматично відображаються у старій VCS, або навпаки.
- git-svn – для роботи з SVN через Git:
-
Клонування SVN репозиторію у Git
-
Push/Pull змін між Git та SVN
-
Perforce Git Fusion – дозволяє користувачам Git працювати з Perforce як з віддаленим репозиторієм.
-
Mercurial → Git – інструменти для міграції або двосторонньої синхронізації.
Дозволяє командам поступово переходити на Git без порушення існуючих процесів у старих VCS.
96. Як керувати великими бінарними файлами в Git, якщо не використовувати Git LFS?
- Ігнорування великих файлів
- Додати їх у .gitignore, щоб не відстежувати у Git:
*.mp4
*.zip
node_modules/
dist/
- Зберігання поза репозиторієм
-
Використовувати зовнішні сховища:
-
AWS S3, Google Cloud Storage, Azure Blob
-
CDN або внутрішні файлові сервери
-
-
В Git зберігати лише посилання (URL, шлях) на файл.
- Артефактні репозиторії
- Для build-артефактів або бінарників застосовувати Nexus, Artifactory, Verdaccio.
- Розбиття на менші пакети
- Якщо можливо, ділити великі файли на менші частини для зручнішої доставки.
- Shallow clone / sparse checkout
- Не завантажувати всю історію репозиторію або непотрібні директорії:
git clone --depth 1 <repo>
git sparse-checkout init --cone
git sparse-checkout set src/
Висновок: без Git LFS великі файли краще зберігати зовні, а в Git тримати лише код і lightweight метадані.
97. Для чого використовується git rebase -i (інтерактивний rebase)?
-
git rebase -i
дозволяє інтерактивно змінювати історію комітів у локальній гілці. -
Основні сценарії використання:
-
Squash комітів – об’єднати кілька маленьких комітів в один.
-
Редагування повідомлень комітів – змінити commit message.
-
Видалення непотрібних комітів – drop комітів із історії.
-
Перестановка комітів – змінити порядок комітів для чистішої історії.
git rebase -i HEAD~3
-
Відкриває останні 3 коміти в текстовому редакторі для редагування.
-
Кожен коміт можна позначити як pick, squash, edit, drop.
Порада: використовувати тільки для локальної гілки, яка ще не пушилась у віддалений репозиторій, щоб не порушити історію інших розробників.
98. Як організувати безперервне резервне копіювання репозиторіїв Git?
- Віддалені репозиторії (Remote Backup)
-
Основний метод — регулярний пуш у віддалений репозиторій (GitHub, GitLab, Bitbucket, приватний сервер).
-
Приклад автоматичного резервного копіювання локального репо:
git remote add backup <backup-repo-url>
git push --mirror backup
--mirror
зберігає всі гілки, теги та refs.
- Автоматизація через CI/CD або cron
- Використати cron на сервері або workflow у CI/CD для періодичного пушу:
0 2 * * * cd /path/to/repo && git fetch origin && git push --mirror backup
- Бекап з архівуванням
- Створювати архіви (tar/zip) репозиторію:
git bundle create repo.bundle --all
-
Архів можна зберігати на іншому сервері або S3.
-
Відновлення:
git clone repo.bundle -b main <new-dir>
- Хмарне сховище
- Регулярний бекап .git директорії у S3, Google Drive, Azure Blob.
-
Комбінувати віддалений mirror + архіви для критичних проєктів.
-
Перевіряти бекапи, щоб уникнути "битих" репозиторіїв.
99. Як чутливість до регістру впливає на Git і як її контролювати на різних ОС?
- Чутливість Git до регістру
-
Git регістрочутливий щодо імен файлів за замовчуванням.
-
file.txt і File.txt сприймаються як різні файли.
-
Це може спричиняти проблеми при роботі в командах на різних ОС.
- Поведінка на різних ОС
ОС | За замовчуванням | Проблеми |
---|---|---|
Linux | case-sensitive | все працює як очікується |
macOS | case-insensitive (HFS+) | може ігнорувати зміни регістру, конфлікти при колаборації з Linux |
Windows | case-insensitive | теж може створювати конфлікти при мережевій роботі з Linux/macOS |
- Як керувати чутливістю
- core.ignorecase – налаштування Git:
git config core.ignorecase true # ігнорувати регістр (Windows/macOS) git config
core.ignorecase false # враховувати регістр (Linux)
-
Рекомендація: у командах, де є Linux-сервери, тримати false, щоб уникнути несподіванок.
-
Для зміни імен файлів регістром:
git mv File.txt temp.txt git mv temp.txt file.txt git commit -m "Fix filename
case"
-
Регістрочутливість важлива для кросплатформових проєктів.
-
Краще дотримуватись уніфікованого стилю іменування файлів і налаштувати core.ignorecase відповідно до основної CI/CD-платформи.
100. Як організувати підтримку кількох версій продукту за допомогою Git-гілок?
- Гілка для основної версії (main/master)
- Використовується для стабільного коду, який завжди готовий до деплою.
- Гілки для релізів (release branches)
- Кожна підтримувана версія продукту має свою гілку, напр.:
release/1.0
release/1.1
release/2.0
- На цих гілках виправляються баги, без нових функцій.
- Гілки для розробки (feature branches)
- Створюються від main або від конкретної release/* для нових функцій або критичних патчів.
- Злиття та backport
- Багфікси з нових релізів можна переносити (backport) у старі версії:
git checkout release/1.0
git cherry-pick <bugfix_commit_hash>
- Тегування версій
- Кожен стабільний реліз позначати тегом для швидкого rollback або деплою:
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
-
Використовувати стратегію Gitflow або спрощений Release Branch Workflow.
-
Кожна версія продукту підтримується окремою гілкою, що дозволяє паралельно виправляти баги у старих релізах, не блокуючи нову розробку.
Вітаю! ✨ Цей репозиторій містить вичерпний конспект, який я створила під час проходження курсу Нікіти Тимошенка про Git та GitHub
📌 Конспект у форматі питання-відповіді, щоб ви могли перевірити себе та швидко знаходити потрібну інформацію.
📌 Структура наближена до курсу, тож вам буде легко орієнтуватися в темах і знаходити потрібний матеріал.
📌 Раджу пройти сам курс та прочитати конспект від Нікіти адже там багато корисного:
- детальний опис команд,
- практичні завдання,
- корисні посилання.
✨ А цей конспект допоможе вам перевірити, наскільки добре ви засвоїли отримані знання! 🚀
Якщо є якісь зауваження, або пропозиції для покращення не соромтесь створювати issues або pull requests. Я відкрита до зворотного зв'язку 🙌
Легкого навчання!😊
Командний рядок
Git
GitHub
Що таке GUI?
- графічний інтерфейс користувача (Graphical User Interface)
- спосіб взаємодії користувача з комп'ютером із використанням графічних елементів (вікна, кнопки і тд)
Що таке Сommand Line?
- командний рядок
- текстовий інтерфейс для взаємодії з операційною системою
- простір, де вводяться текстові команди
- і тут же можуть викликатися і запускатися певні програми
Що таке термінал?
- програма або інструмент, який надає доступ до командного рядка (вікно, куди команди вводяться)
Що таке Shell?
- оболонка
- програма, яка виконує команди, введені у терміналі (інтерпретатор команд)
Що таке Bash?
- один із типів оболонок (Shell)
- Bourne Again Shell (Bash)
- підтримується у Windows через Git Bash
Що таке каталог (директорія)?
- структура, яка використовується для організації файлів у файловій системі
Що таке поточний каталог?
- папка, в якій користувач перебуває прямо зараз
- команди по замовчуванню виконуються у поточному каталозі
Що таке батьківський каталог?
- папка, що знаходиться на один рівень вища, за поточний
Що таке домашній каталог?
- персональний каталог користувача
- Диск С —> Users —> User name (або USER)
Що таке кореневий каталог?
- початкова точка файлової системи
- найвищий рівень ієрархії каталогів
Що таке шлях (path)?
- адреси файлів у каталозі файлової системи
Які є два види шляхів до файлів?
- абсолютний
- відносний
Де починається абсолютний шях?
- з кореневого каталогу
Що визначає відносний шях?
- розташування файлу по відношенню до поточного каталогу
Що таке розширення файлів?
- частина назви файлу, що йде після крапки
Для чого потрібне розширення файлів?
- для визначення типу файлу
Яка команда відображає вміст всієї папки, у якій знаходиться користувач?
- ls
Яка команда дозволяє відобразити вміст каталогу відмінного від поточного?
- ls
path
(вказати шлях)
Які типи шляхів це дозволяють?
- обидва: відносний та абсолютний
Яка команда дозволяє повернути вмісти кореневого каталогу?
- ls /
Яка команда дозволяє повернути вмісти батьківського каталогу?
- ls ..
Яка команда очищає вікно терміналу?
- clear
Як у Git Bash навігувати по командам, що вже були написані?
- стрілочка вгору (до попередніх команд)
- стрілочка вниз (до наступних команд, що були після попередніх)
Що таке прапорці команд?
- додаткові опції команд
Як впроваджуються прапорці команд?
- через дефіси, які ми пишемо після команди
Який прапорець надає довідку?
комадна
--help
Яка команда дозволяє повернути вміст всіх папок у довгому форматі (з прапорцем)?
- ls -l
Як вивести дані, які повертає команда у вигляді текстового файлу?
your_command
> file_name.extension
Яка команда дозволяє вивести вміст папок у вигляді текстового файлу?
- ls >
file_name.extension
- наприклад, ls > output.txt
Яка команда дозволяє вивести вміст папок у вигляді текстового файлу у довгому форматі?
- ls -l >
file_name.extension
- наприклад, ls -l > output.txt
Яка команда показує поточну директорію?
- pwd
- prind working directory
Що повертає ця команда?
- шлях до каталогу, у якому ми знаходимось
Яка команда дозволяє змінити поточну директорію на домашній каталог користувача?
- cd
- change directory
Як змінити поточну директорію на якусь конкретну іншу?
- cd
path
(вказати шлях)
Яка команда повертає до батьківської директорії?
- cd ..
Яка команда створює нову папку?
- mkdir
directory_name
- make directory
Як створити одразу кілька папок у поточній директорії?
- mkdir
directory_name_1
directory_name_2
- якщо потрібні вкладені каталоги:
- mkdir -p dir1/dir2/dir3
Яка команда дозволяє скопіювати директорію до певної папки?
- cp -r
copy_directory to_directory
Яка команда дозволяє видалити директорію?
- rm -r
file_name
(рекурсивне видалення) - якщо директорія містить файли:
- rm -rf directory_name
Яка команда створює файл?
- touch
file_name.extension
Як команда дозволяє скопіювати файл і перенести його до іншої папки?
- cp
copy_file destination_directory/
- copy
Яка команда дозволяє записати щось у файл?
- echo
print_something
>in_file
Яка команда дозволяє повернути вміст файлу?
- cat
file_name
Яка команда дозволяє видалити файл?
- rm
file_name
Що таке Git?
- програмне забезпечення
- система контролю версій (VCS — version control system)
- відстежує зміни у файлах
- дає змогу повернутися до попередніх версій
- забезпечує зручну співпрацю команд
Що пропонує Git?
- локальну базу даних
- синхронізацію з іншими серверами
- відновлення даних у разі збою
Які основні стани файлів у Git?
- modified — файл змінено, але не додано до бази даних
- staged — файл підготовлено до збереження
- committed — зміни збережено у локальній базі даних
Що робить звичайну папку локальним репозиторієм?
- папка .git
Яка команда ініціалізує репозиторій?
- git init
- після цієї команди з'являється папка .git і наша папка стала репозиторієм
Як переконатися, що Git встановлено (яка команда)?
- git --version
Яка команда дозволяє змінити налаштування (конфігурацію) Git?
- git config
Який прапорець дозволяє встановити зміни конфігурації для всіх репозиторіїв (теперішніх і майбутніх)?
- --global
Як встановити ім'я користувача у конфігурації?
- git config --global user.name
"your_name"
Як встановити пошту (email) користувача у конфігурації?
- git config --global user.email
"your_email"
Навіщо потрібно встановлювати ці налаштування?
- щоб git міг відслідковувати, хто автор змін
Яка команда перелік всіх налаштувань конфігурації?
- git config --list
Яка команда дозволяє вивести всі папки, в тому числі приховані (трекінгові)?
- ls -a
Яка команда дозволяє перевірити статус статуси файлів?
- git status
Яка команда дозволяє отримати довідку?
- git --help
- git
your_command
--help (довідка для конкретної команди)
Які три основні концепції git?
- коміти
- збереження усіх версій файлів
- гілки
Що таке коміт?
- збереження файлу (його версії)
- інформація про те:
- хто зберіг
- коли зберіг
- що саме було зроблено
- можливість повернутися до попередніх версій файлів
Як зберігаються в комітах файли, в який не було жодних змін?
- зберігається посилання на вихідний файл
Який порядок локального збереження версій файлів?
- git add (staging area)
- git commit (committed area)
Які шляхи вказання шляху до потрібної директорії (команда і два варіанти відображення шляху)?
- команда — cd
- відображення шляху:
- перетягти папку у вікно git bash (і шлях відобразиться, треба тільки cd на початку дописати)
- написати повністю шлях самостійно
Які каталоги git не відстежує?
- в яких немає файлів, або файлів, які ігноруються через .gitignore
Як додати усі файли однією командою у staging area?
- git add .
Як додати один файл у staging area?
- git add
file_name
Як додати коротке повідомлення до коміту?
- git commit -m
"your_comment"
- вказується коротко, які зміни зроблено
Як змінити текстовий редактор і встановити його основним (команда)?
- git config --global core.editor `"your_editor"
Яка команда виводить перелік всіх комітів?
- git log
Який прапорець дозволяє вивести історію у більш компактному вигляді?
- --oneline
- повний варіант команди: git log --oneline
Яка команда (з прапорцем) дозволяє подивитися зміни комітів?
- git log -p
Як вийти з інтерактивного режиму (яка клавіша)?
- q (маленька)
Яка команда дозволяє подивитись відмінності у файлах (і всього репозиторію)?
- git diff (difference)
Яка загальноприйнята практика формулювання повідомлень для комітів?
- наказова (імперативна) форма
- (add, write, remove, delete, change, fix etc.)
Як додати тіло коміту, щоб детальніше описати зміни (послідовність кроків)?
- не закривати лапки
- клікнути enter
- перейти на новий рядок
- продовжити писати
- закрити лапки
- enter (для відправки коміту)
Як додати зміни так, щоб вони були частиною попереднього коміту, а не новоствореним комітом?
- git add .
- git commit --amend --no-edit (замість повідомлення)
- enter
Як накопичувати зміни з різних файлів для одного коміту?
- внести зміни в різні файли та/або створити нові файли
- git add . (додаємо всі файли)
- git commit -m
"your_commit"
Як додати кілька файлів (не всі) за один раз до staging area?
- git add
<file_1> <file_3> <file_5>
Як побачити різницю у файлах, що вже додані до staging area?
- git diff --chached
Як повернути файли зі staging area до working area?
- після git add але до git commit
- git restore --staged <file_name> or path to file
Як подивитися, який саме невідстежуваний файл користувач планує видалити (який прапорець)?
- -n
- повна команда: git clean -n
Яка команда дозволяє видалити невідстежувані файли з git (з прапорцем)?
- git clean -f
Яка команда дозволяє видалити невідстежувані файли і каталоги з git (з прапорцем)?
- git clean -fd
- ця команда незворотна
Яка команда дозволяє видалити відстежувані файли з індексу та робочого каталогу?
- git rm
<file_name>
(remove)
Яка команда дозволяє видалити відстежувані файли тільки з індексу, залишивши його у робочому каталозі (з прапорцем)?
- git rm --cached
<file_name>
Що зберігається в комітах?
- зміни, що були зроблені у файлах
Що має унікальне кожна нова версія файлів?
- "#" — хеш-код (як id)
- є унікальним для кожної версії файлу
Яка команда дозволяє повернути закомічений файл (наприклад, після його видалення)?
- git restore
file_name
- за замовчування звернення до останньої закоміченої версії файлу
Яка команда дозволяє дізнатися, що було змінено в тому чи іншому коміті (по id)?
- git show
commit_id
Яка команда дозволяє повернутися до конкретної версії файлу (а не тільки останньої, по id)?
- git restore --source=
commit_id
file_name
Яка команда дозволяє відмінити зміни, які вже були додані до staging area?
- git restore --staged
file_name
Яка команда дозволяє повернутися до попередньої (та/або конкретної версії всього проєкту)?
- git reset
прапорець
HEAD або ID
HEAD
— останній комітID
— конкретний коміт з переліку попередніх
Які прапорці має ця команда і чим вони відрізняються?
-
--hard — перезапише повністю до поточної версії, до якої ми звернемося (через id) і повністю видаляє всі зміни
-
--soft — дозволяє зберегти внесені зміни (у staging)
-
--mixed — використовується за замовчуванням
- всі зміни, які були додані до staging area, будуть прибрані назад у робочу директорію
- тобто файли, які були в staging, знову стають "modified", але не видаляються
-
повні команди:
- git reset --hard
ID
- git reset --soft
ID
- git reset --hard
Яка основна гілка проєкту?
- main (master) — різна назва, але значить одне й те саме
Що таке HEAD?
- вказівник того, де ми знаходимось
- в якій гілці
- в якому коміті
- за замовчуванням знаходимося в останньому коміті
- кожна окрема гілка має свій HEAD
Що означає "detached HEAD"?
- коли
HEAD
не вказує на останній коміт гілки, а вказує на конкретний коміт або тег
За допомогою якої команди HEAD переходить у стан detached HEAD?
- git checkout
commit_hash
- у цьому випадку
HEAD
вказує на той коміт, а не на гілку
Що дає detached HEAD?
- У стані detached HEAD можна переглядати або тестувати код на певному коміті, але будь-які нові коміти, які будуть зроблені, не будуть пов'язані з жодною гілкою
- для збереження коміту, що був зроблений у цьому стані, потрібно створити нову гілку, щоб не втратити зміни
Як вийти зі стану "detached HEAD"?
- використати команду
git checkout <branch-name>
, де<branch-name>
— це назва гілки, на якій ви хотіли б продовжити працювати
Що таке конфлікти в git?
- ситуація, коли на одних і тих самих рядках, в одних і тим самих файлах вказані різні дані
Що значить "вирішити конфлікт"?
- конкретне вказання git, які саме зміни мають бути внесені
Що значить merge?
- впровадити зміни до основої гілки (об'єднати всі додаткові гілки в main)
Яка є альтернативна merge?
- rebase
Що дозволяє робити ця альтернатива?
- інтегрувати зміни після останньої актуальної версії в main гілці
Які складнощі пов'язані з цим способом?
- перезапис id деяких комітів, що може викликати певні складнощі, якщо виникне потреба відновити якісь попереднії версії
Яка команда виведе список всіх гілок?
- якщо потрібно побачити тільки локальні гілки
- git branch
- якщо потрібно побачити віддалені гілки
- git branch -r
Яка команда дозволяє створити нову гілку?
- git branch
branch_name
Яка команда дозволяє перемикатися між гілками?
- git checkout
branch_name
Яка команда дозволяє створити і перемкнутися на гілку (одна команда — дві дії)?
- git checkout -b
branch_name
- -b — від слова branch
Яка є альтернативна команда для зміни гілки?
- git switch
branch_name
Яка вона дозволяє за один крок створити гілку і одразу перемкнутися на неї (синтаксис команди)?
- git switch -b
branch_name
Яка різниця між цими двома варіантами команд?
- git switch:
- більш проста у розуміння і використанні
- використовується спеціально для перемикання (та/або для створення і перемикання) між гілками
- git checkout:
- більш універсальна
- використовується для:
- перемикання (та/або для створення і перемикання) між гілками
- зміни гілок
- відновлення файлів (скасування змін)
- перемикання між комітами
В якій гілці ми маємо знаходитися перед тим, як зробити об'єднання гілок?
- в тій, в яку хочемо інтегрувати зміни (в цільовій)
Яка команда дозволяє об'єднати гілки?
- git merge
branch_name
Назву якої гілки ми маємо писати у команді об'єднання?
- назву гілки, яку об'єднуємо з цільовою гілкою (тобто назву альтернативної, додаткової гілки)
Яка команда дозволяє тільки передати зміни, але не об'єднувати гілки?
- git fetch
Яка команда (з прапорцем) дозволяє видалити гілку?
- git branch -d
branch_name
- git branch -D
branch_name
Яка різниця між цими двома прапорцями?
- -d (soft delete) — не дозволить видалити гілку, яка ще не була передана до main (яка ще не інтегрована)
- -D (hard delete) — видалить гілку незалежно від того, чи вона вже інтегрована у main чи ще ні (безумовне видалення гілки)
Які бувають git-сховища?
- GitHub
- GitLab
- Bitbucket, Azure DevOps, SourceForge — також популярні віддалені репозиторії
Яке типове ім'я git?
- origin - стандартна назва для віддаленого репозиторію, але її можна змінювати
Що передбачає концепція клонування?
- створення локальної копії віддаленого репозиторію на комп'ютері
Що передбачає концепція такого ключа?
- спосіб безпечного підключення по GitHub без введення пароля
- SSH-ключ складається з публічного та приватного ключа. Публічний ключ додається до GitHub, а приватний зберігається локально
Що передбачає концепція push?
- надсилання змін у віддалений репозиторій
Яка команда?
- git push
Що передбачає ця концепція?
- завантаження змін з віддаленого репозиторію
Яка команда?
- git pull
Що передбачає ця концепція?
- запит на злиття змін із однієї гілки в іншу
- часто використовується для перевірки коду
Як називається перевірка коду іншим розробником?
- code review
Що передбачає ця концепція?
- копіювання репозиторію в акаунт користувача, що дозволяє експериментувати з кодом, не змінюючи оригінал
Що це за файл?
- файл документації, що зазвичай містить опис проєкту, інструкції з використання та іншу корисну інформацію
Що означає розширення **.md**
- формат markdown
- система форматування тексту
Що передбачає ця концепція?
- систему відстеження помилок, запитів на нові функції та обговорень у репозиторії
Яка має бути назва репозиторію?
- унікальною в межах репозиторію
Які бувають типи репозиторіїв?
- публічні
- приватні
Що таке ліцензія?
- документ, у якому прописано, що можна, а що заборонено робити з репозиторієм (чи можна завантажувати код, перевикористовувати його у власних проєктах і тд)
- опис можливостей взаємодії з репозиторієм
Про що говорить ліцензія MIT?
- про те, що код і файли з репозиторію можна використовувати як завгодно без обмежень, але обов'язково потрібно вказати авторство власника репозиторію, з якого беруться дані
Як можна додати файли у репозиторій?
- створити прямо на платформі у github
- завантажити з комп'ютера через командний рядок
Що таке .gitignore?
- файл, який використовується для того, щоб ігнорувати певні файли та папки в git. Файли і теки, додані в .gitignore не будуть додватись у коміти та потрапляти у репозиторій
Яку папку ні в якому разі не можна додавати у репозиторій?
- node_module — тека, яка містить всі залежності, встановлені у проєкті
Якою командою можна завантажити цю папку, не завантажуючи її у репозиторій?
- npm install
Що дає змогу робити кнопка "Watch" у репозиторії?
- слідкувати за змінами репозиторію
Що дає змогу зробити кнопка "Fork"?
- зробити повну копію репозиторію
Як використовується зірочка в репозиторіях?
- як елементи рейтингу
Чи впливають зміни, внесені у скопійований репозиторій на оригінал?
- ніяким чином, це два окремі репозиторії
У якій вкладці можна подивитися, хто зробив копію репозиторію?
- insights —> forks
Як можна змінити видимість репозиторію (яка вкладка і шлях)?
- settings —> general —> danger zone —> change repository visibility
Що таке pull request?
- запит на об'єднання змін, які розробник вніс в код, з основною гілкою проєкту
Де розробник може вносити зміни віддалено без шкоди основному репозиторію (два варіанти)?
- створити окрему гілку (git branch -b
branch_name
) - повністю скопіювати репозиторій (fork)
Яка вкладка відповідає за створення pull request?
- однойменна "Pull request"
Який статус повідомляє про те, що об'єднання можливе?
- able to merge
Яка вкладка відповідає за створення завдання?
- однойменна "Issues"
Як можна створити задачу?
- натиснути на кнопку "New issue"
- ввести title — лаконічно пояснити, яка проблема виникла
- написати description (за потреби додати якісь додаткові матеріали) — запропонувати кілька рішень
- натиснути кнопку "create"
Які основні кроки?
- connection — утворення зв'язку між git & github
- ssh-key
- sync — синхронізація того, що є на комп'ютері і того, що є на github
- push local to remote repo або
- clone remote to local repo
- pull — завантажити собі останню актуальну версію проєкту (оновлення локального репо)
- branch — створюємо нову гілку
- commit — передаємо зміни з гілки до локального репо
- push — відправляємо всю гілку зі змінами до віддаленого репо
- pull request — інформація про зміни, які ми плануємо передати до main
- code review
- merge
- повторюємо цикл з пункту три
Що таке ssh-ключ?
- файл, який має зберігати приватний ключ на комп'ютері та одночасно публічний ключ на github
У якій вкладці ці ключі зберігаються на github?
- profile settings —> SSH and GPG keys
Яка послідовність створення і збереження?
- створити файл на машині, де буде зберігатися ключ
- додати його на github
Скільки разів має створюватися цей ключ?
- один раз на одну машину
Мега важливий конспект по створенню і збереженню ssh ключа
Яка послідовність ініціалізацї, комітів та додавання файлів до локального репо (крок — команда)?
- ініціалізація репозиторію
- git init
- додати файли до staging area
- git add .
- зробити коміт
- git commit -m
"Initial commit"
- git commit -m
- перевірка статусу (за потреби)
- git status
Яка команда дозволяє відправити зміни на github?
- git remote add origin
repo_link
(https or ssh)
Що означає "origin"?
- використовується як псевдонім до посилання
Звідки можна взяти посилання на repo?
- з github
- при створення порожнього репозиторію це вікно відкривається по дефолту з детальним описом, як віддалений репозиторій підв'язати до локального
Яка команда дозволяє відправити весь код з локальної машини на віддалений репозиторій після об'єднання цих репозиторіїв?
- git push -u origin main
- -u — від слова "upstream"
За що відповідає upstream?
- повідомляє github з якої гілки брати зміни та/або в яку гілку зміни
завантажувати
- Upstream гілка — це віддалена гілка, до якої підключено локальну гілку для відправки та отримання змін
Яка команда дозволяє перейменувати головну гілку (з master на main)?
- git branch -M main
Яка команда дозволяє відправити на віддалений репозиторій гілку, яка була створено локально?
- git push --set -upstream origin
branch_name
- зазвичай git одразу пропонує цю команду за замовчування після команди push, тому залишається тільки скопіювати її і вставити в термінал
Що робить --set upstream?
- встановлює гілку на віддаленому репозиторії origin
- --set-upstream встановлює зв'язок між локальною і віддаленою гілкою для автоматичної синхронізації
За допомогою якої команди можна скопіювати репозиторій собі локально?
- git clone
repo_link
(https or ssh)
Яка різниця між використання https та ssh посилання?
- https вимагає явної авторизації
- з ssh ключем проводиться неявна авторизація (немає потреби кожен раз вводити логін і пароль для підтвердження)
Яка команда дозволяє відобразити які локальні гілки пов'язані з віддаленими гілками?
- git branch -vv
- також ця команда показує інформацію про останні коміти в цих гілках