Питання на співбесіді з Git з відповідями
Коміти, індекс і гілки, merge і rebase, конфлікти, скасування змін через reset, revert і reflog, віддалені репозиторії й pull request, переписування історії, внутрішня будова Git і командні процеси.
226 запитань для співбесіди з теми Git з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- Коміти
- Гілки
- Rebase
- Reset
- Процеси
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Git · Junior
- Що робить Git розподіленою системою контролю версій?
Правильна відповідь: Кожен клон має всю історію й може працювати офлайн
Клон містить усі коміти, тож комітити, створювати гілки й дивитися історію можна без сервера. Віддалений репозиторій на кшталт GitHub - просто ще одна копія, з якою команда домовилася синхронізуватися.
- Через які три основні області проходить файл у Git?
Правильна відповідь: Робоча копія, індекс (staging area), репозиторій
Ви редагуєте файли в робочій копії, вирішуєте, що піде в наступний коміт, через
git add(індекс), аgit commitзберігає цей знімок у репозиторії. - Що робить
git add file.js?Правильна відповідь: Додає поточний вміст файлу в індекс
git addкопіює поточний стан файлу в індекс. Якщо після цього знову змінити файл, нові зміни не потраплять у коміт, доки ви не виконаєтеgit addще раз. - Що зберігає коміт у Git?
Правильна відповідь: Знімок проєкту, автора, повідомлення й батька
Концептуально кожен коміт - повний знімок (незмінені файли перевикористовуються, а не дублюються) з метаданими й посиланням на батька. Різниця обчислюється тоді, коли ви її запитуєте.
Git · Middle
- Що робить
git rebase mainна гілці фічі?Правильна відповідь: Переносить коміти гілки поверх свіжого
mainКожен коміт фічі застосовується заново на новій базі, утворюючи нові коміти з новими хешами. Виходить лінійна історія, ніби гілку створили від сьогоднішнього
main. - Яке «золоте правило» rebase?
Правильна відповідь: Не робіть rebase комітів, на яких інші будують роботу
Rebase замінює коміти новими. Якщо в колег уже є старі, їхня історія розійдеться, і з'являться дублікати. Свою незапушену чи приватну гілку rebase-ити можна.
- Merge чи rebase для інтеграції
mainу гілку фічі: у чому компроміс?Правильна відповідь: Merge зберігає справжню історію; rebase дає лінійну, але переписує коміти
Merge точно зберігає, що сталося, і додає merge-коміти; rebase дає чисту лінію, яку легше читати й бісектити, ціною нових хешів. Команда обирає одну домовленість.
- Під час rebase виник конфлікт. Яка звичайна послідовність дій?
Правильна відповідь: Виправити файли,
git add, потімgit rebase --continueRebase зупиняється на коміті з конфліктом; після розв'язання й
git addкоманда--continueпереходить до наступного.--skipповністю відкидає поточний коміт,--abortповертає початкову гілку.
Git · Senior
- Які чотири типи об'єктів складають базу об'єктів Git?
Правильна відповідь: Blob, tree, commit та анотований тег
Blob містить вміст файлу, tree зіставляє імена з blob і піддеревами, commit вказує на дерево й батьків, а анотований тег вказує на об'єкт із повідомленням. Гілки - це посилання, а не об'єкти.
- Чому перейменування файлу не дублює його вміст у сховищі Git?
Правильна відповідь: Blob адресується вмістом; змінюється лише запис у tree
Однаковий вміст завжди має однаковий хеш, тому зберігається один раз. Перейменування Git виявляє пізніше, порівнюючи дерева, а не записує явно.
- Що таке ref усередині Git?
Правильна відповідь: Ім'я, що зберігає хеш коміту, як
refs/heads/mainПосилання живуть як маленькі файли або в
packed-refs.HEAD- символьне посилання на інше посилання. Перемістити гілку означає просто записати новий хеш у її ref. - Що робить
git gc?Правильна відповідь: Пакує об'єкти, чистить недосяжні й старі записи reflog
Вільні об'єкти стискаються в packfile з дельтами, а об'єкти, недосяжні з refs і reflog, видаляються після пільгового періоду. Git запускає це автоматично.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід на JavaScript (debounce, deepClone, Promise.all, LRU-кеш), на TypeScript (дженерики, звуження й утилітні типи, перевіряє справжній компілятор), серверна логіка на Node.js (middleware, обмеження частоти, черги задач), SQL-запити в справжньому PostgreSQL і на React: компоненти й хуки на кшталт списку справ, вкладок, useDebounce та useInterval.
Відкрити задачі →