Пошук уроків, статей та іншого контенту
Розберетеся, як Git зберігає історію змін, допомагає працювати в команді та відновлювати попередні версії файлів.
Git — це система контролю версій. Вона зберігає історію змін у файлах проєкту та дозволяє:
бачити, що саме і коли змінилося;
повертатися до попередніх версій;
експериментувати, не ризикуючи зламати основний код;
працювати над одним проєктом разом з іншими розробниками;
знаходити автора конкретної зміни.
Git працює локально на вашому комп’ютері. Для його використання не потрібне постійне підключення до інтернету.
Без Git історію змін часто зберігають у файлах із назвами на кшталт:
project-final.zip
project-final-2.zip
project-final-really-final.zipТакий підхід швидко стає незручним:
важко зрозуміти, яка версія актуальна;
незрозуміло, що саме змінилося;
складно об’єднати роботу кількох людей;
помилково можна видалити потрібну версію.
Git вирішує ці проблеми, зберігаючи впорядковану історію проєкту.
Репозиторій — це папка проєкту, у якій Git зберігає історію змін. Історія міститься у прихованій папці .git.
Створити репозиторій можна командою:
git initПісля цього поточна папка стає Git-репозиторієм.
Не слід видаляти папку
.git, якщо ви хочете зберегти історію проєкту.
Git стежить за файлами в репозиторії та помічає, коли їхній вміст змінюється.
Наприклад, ви можете створити файл index.html, відредагувати його, додати новий файл або видалити наявний. Git побачить ці зміни, але не збереже їх в історії автоматично.
Коміт — це зафіксований стан проєкту в певний момент часу.
Кожен коміт містить:
набір змінених файлів;
інформацію про автора;
дату й час;
повідомлення з описом змін;
посилання на попередній коміт.
Коміти утворюють послідовну історію проєкту.
Хороше повідомлення коміту коротко пояснює, що було зроблено:
Add contact form
Fix navigation link
Update styles for mobile screensУ спрощеному вигляді робота з Git складається з трьох станів:
Робоча папка — файли, які ви редагуєте.
Область підготовлених змін — зміни, які ви плануєте додати до наступного коміту.
Репозиторій — уже збережена історія комітів.
Типовий процес має такий вигляд:
редагування файлів → git add → git commitКоманда git add додає зміни до області підготовлених змін.
Команда git commit створює коміт із підготовлених змін.
Нижче наведено повний базовий сценарій. Команди виконуються в терміналі.
# Створюємо папку проєкту та переходимо до неї
mkdir git-demo
cd git-demo
# Створюємо новий Git-репозиторій
git init
# Створюємо перший файл
printf "# Мій проєкт\n" > README.md
# Перевіряємо стан репозиторію
git status
# Додаємо файл до наступного коміту
git add README.md
# Зберігаємо першу версію проєкту
git commit -m "Add project README"
# Додаємо до файлу новий рядок
printf "\nЦе навчальний проєкт.\n" >> README.md
# Переглядаємо незбережені в коміті зміни
git diff
# Додаємо нову зміну до наступного коміту
git add README.md
# Зберігаємо другу версію проєкту
git commit -m "Describe the project"
# Переглядаємо історію комітів
git log --onelineПісля виконання команд git log --oneline ви побачите приблизно такий результат:
a1b2c3d Describe the project
e4f5g6h Add project READMEПерші символи — це скорочені ідентифікатори комітів. За ними Git може однозначно знайти потрібну версію.
Команда:
git statusпоказує:
поточну гілку;
змінені файли;
файли, які ще не відстежуються;
зміни, підготовлені до коміту;
підказки щодо наступних дій.
Це одна з найкорисніших команд Git. Її варто виконувати перед додаванням змін і перед створенням коміту.
Команда:
git diffпоказує зміни, які ще не додані до області підготовлених змін.
Щоб переглянути зміни, які вже підготовлені командою git add, використовуйте:
git diff --stagedЦе допомагає перевірити коміт до його створення.
Для перегляду комітів використовується:
git logСкорочений варіант:
git log --onelineЩоб переглянути вміст конкретного коміту, скористайтеся його ідентифікатором:
git show a1b2c3dТак можна дізнатися:
які файли змінилися;
які рядки було додано;
які рядки було видалено;
повідомлення коміту;
автора та дату зміни.
Якщо в останньому коміті файл мав правильний вигляд, а потім ви внесли невдалі зміни, їх можна скасувати:
git restore README.mdКоманда повертає файл до стану останнього коміту. Незбережені зміни в цьому файлі буде втрачено.
Щоб отримати файл із попереднього коміту, можна вказати його ідентифікатор:
git restore --source HEAD~1 -- README.mdТут:
HEAD — поточний коміт;
HEAD~1 — коміт перед поточним;
README.md — файл, який потрібно відновити.
Після відновлення Git сприйматиме файл як змінений. Якщо результат правильний, його можна знову додати та зафіксувати:
git add README.md
git commit -m "Restore previous README version"Відновлення файлу не переписує історію попередніх комітів. Воно створює нову зміну, яку можна зафіксувати окремим комітом.
У командній роботі кожен розробник може:
отримати копію репозиторію;
створити власну гілку для завдання;
робити коміти у своїй гілці;
передати зміни до спільного репозиторію;
об’єднати готову роботу з основною гілкою.
Git зберігає автора кожного коміту, тому можна визначити, хто і коли вніс певну зміну.
Гілки також допомагають працювати паралельно. Наприклад, одна людина може додавати форму реєстрації, а інша — виправляти стилі. Їхні зміни не обов’язково заважатимуть одна одній.
Якщо кілька людей змінили ті самі рядки, Git повідомить про конфлікт. У такому разі розробники вручну визначають, який варіант залишити, після чого створюють коміт із виправленим результатом.
Git може працювати лише на локальному комп’ютері, але репозиторій також можна зберігати на віддаленому сервері.
Це дає змогу:
створити резервну копію проєкту;
отримати зміни інших розробників;
передати власні коміти команді;
працювати над одним проєктом із різних комп’ютерів.
Сам Git — це система контролю версій. Сервіси для розміщення Git-репозиторіїв є окремими платформами, які додають спільну роботу, перевірку коду та інші можливості.
Базовий цикл роботи над завданням може виглядати так:
# Перевіряємо поточний стан
git status
# Переглядаємо зміни у файлах
git diff
# Додаємо потрібні файли
git add src/app.js
# Перевіряємо підготовлені зміни
git diff --staged
# Створюємо коміт із коротким описом
git commit -m "Add form validation"
# Переглядаємо останні коміти
git log --onelineДодавати до коміту можна як окремий файл:
git add src/app.jsтак і кілька файлів:
git add src/app.js src/styles.cssДодавати варто лише ті зміни, які стосуються поточного завдання.
Якщо не переглянути підготовлені файли, до коміту можна випадково додати зайві зміни.
Перед комітом корисно виконати:
git status
git diff --stagedПовідомлення на кшталт update, fix або changes не пояснюють, що саме було зроблено.
Краще написати:
Fix empty email validationабо:
Add footer navigationЯкщо в одному коміті одночасно змінено стилі, виправлено помилку та додано нову функцію, його складніше перевіряти й скасовувати.
Краще створювати невеликі логічні коміти.
git add і git commitgit add ще не зберігає зміни в історії. Він лише готує їх.
Саме git commit створює нову точку в історії проєкту.
git restore без перевіркиКоманда git restore може видалити незбережені зміни у файлі. Перед її виконанням переконайтеся, що ці зміни вам більше не потрібні або що вони вже збережені в іншому місці.
Git — це система контролю версій для відстеження змін у проєкті.
Репозиторій містить файли та історію комітів.
Коміт — це зафіксований стан проєкту.
git status показує поточний стан файлів.
git add готує зміни до збереження.
git commit додає зміни до історії.
git log показує попередні коміти.
git diff допомагає переглядати зміни.
git restore дає змогу повернути файл до попереднього стану.
Git допомагає команді працювати паралельно та відновлювати попередні версії проєкту.