Пошук уроків, статей та іншого контенту
Дослідите три основні області Git і зрозумієте, як зміни переходять від робочих файлів до коміту.
Git працює не безпосередньо з комітами. Зміни проходять кілька етапів:
Working tree — робоче дерево, тобто файли проєкту, з якими ви працюєте зараз.
Staging area — область підготовлених змін, також відома як index.
Repository — локальне сховище Git, де зберігаються коміти та історія проєкту.
Типовий шлях зміни виглядає так:
файл у working tree
|
| git add
v
staging area
|
| git commit
v
коміт у repositoryGit не додає зміни до коміту автоматично. Ви самостійно визначаєте, які зміни підготувати, а потім зберегти в історії.
Working tree — це поточний стан файлів у директорії проєкту.
Коли ви:
створюєте новий файл;
редагуєте наявний файл;
видаляєте файл;
ви змінюєте саме робоче дерево.
Наприклад, створімо простий Git-проєкт:
mkdir git-demo
cd git-demo
git initКоманда git init створює новий локальний репозиторій у поточній директорії. Після цього Git починає відстежувати стан файлів у ній.
Створімо файл:
printf '# Мій проєкт\n' > README.mdФайл уже існує у working tree, але Git ще не підготував його до коміту.
Перевірити стан можна командою:
git statusРезультат міститиме повідомлення про невідстежуваний файл:
Untracked files:
README.mdUntracked означає, що файл є у робочій директорії, але ще не є частиною підготовлених змін або історії Git.
Staging area — це проміжна область, у яку ви додаєте зміни перед комітом.
Щоб додати файл до staging area, виконайте:
git add README.mdТепер перевірте стан:
git statusGit покаже файл у секції підготовлених змін:
Changes to be committed:
new file: README.mdКоманда git add не створює коміт. Вона лише повідомляє Git:
Додай поточний стан цього файлу до наступного коміту.
Додати кілька конкретних файлів можна так:
git add README.md app.jsЩоб додати всі зміни у поточній директорії, використовують:
git add .На початку роботи краще уважно перевіряти результат git status, особливо перед використанням git add .. Так ви не додасте до коміту випадкові файли.
Repository — це каталог .git усередині проєкту. У ньому Git зберігає:
коміти;
історію змін;
службову інформацію;
підготовлені зміни.
Зазвичай каталог .git створюється після виконання:
git initПісля підготовки змін їх можна зберегти в repository за допомогою команди git commit:
git commit -m "Додано README"Коміт — це зафіксований знімок підготовлених змін. Після успішного коміту Git очистить staging area, а поточний стан working tree відповідатиме останньому коміту.
Переглянути коміти можна командою:
git log --onelineРозглянемо повний приклад: створення файлу, підготовка, коміт і нова зміна.
mkdir git-demo
cd git-demo
# Створення локального репозиторію
git init
# Налаштування автора комітів лише для цього репозиторію
git config user.name "Student"
git config user.email "student@example.com"
# Створення першого файлу у working tree
printf '# Мій проєкт\n' > README.md
# Перевірка стану: файл ще не підготовлено
git status
# Переміщення файлу до staging area
git add README.md
# Перевірка стану: файл підготовлено до коміту
git status
# Збереження підготовлених змін у repository
git commit -m "Додано README"
# Редагування файлу у working tree
printf '\nЦе навчальний Git-проєкт.\n' >> README.md
# Перегляд незбереженої зміни
git diff
# Підготовка нової версії файлу
git add README.md
# Перегляд змін, підготовлених до коміту
git diff --staged
# Збереження другої версії у repository
git commit -m "Описано проєкт"У цьому прикладі один і той самий файл послідовно перебував у трьох станах:
Створений або змінений у working tree.
Доданий до staging area командою git add.
Збережений у repository командою git commit.
Git має команди для порівняння різних областей.
Команда:
git diffпоказує зміни у робочих файлах, які ще не додано до staging area.
Наприклад, після редагування README.md команда покаже доданий текст.
Команда:
git diff --stagedпоказує зміни, які вже підготовлено до наступного коміту.
Це корисна перевірка перед git commit: вона допомагає переконатися, що коміт міститиме саме очікувані зміни.
Команда:
git statusпоказує короткий опис відмінностей між:
останнім комітом;
staging area;
working tree.
Для початківців це основна команда, яку варто запускати під час роботи.
Файл може містити кілька змін, але до коміту можна додати не весь файл, а лише потрібну частину.
Найпростіший варіант для окремого файлу:
git add README.mdПісля цього всі поточні зміни в README.md потраплять до staging area.
Якщо потрібно підготувати лише частину змін, можна скористатися інтерактивним режимом:
git add -pGit по черзі показуватиме фрагменти змін і запитуватиме, чи додати кожен із них до staging area.
На цьому етапі важливо запам’ятати основну ідею: staging area дає змогу сформувати майбутній коміт перед його остаточним створенням.
Іноді файл помилково додали командою git add, але ще не хочуть включати його до коміту.
Прибрати файл зі staging area можна так:
git restore --staged README.mdЦя команда:
прибирає файл зі staging area;
залишає його зміни у working tree;
не видаляє зміни з файлу.
Після цього git status покаже файл як змінений, але не підготовлений до коміту.
Після виконання git status файл може перебувати в одному з таких станів:
Untracked — файл є у working tree, але Git ще не відстежує його.
Modified — відстежуваний файл змінено у working tree.
Staged — зміни додано до staging area.
Committed — зміни вже збережено в коміті repository.
Файл також може мати зміни одночасно у двох областях. Наприклад:
Ви змінили файл.
Виконали git add.
Знову змінили цей самий файл.
У такому випадку:
перша версія зміни перебуває у staging area;
друга, новіша зміна перебуває лише у working tree.
Саме тому перед комітом корисно виконати:
git diff --staged
git statusДля більшості невеликих змін достатньо такого порядку:
# Перевірити поточний стан
git status
# Внести зміни у файли
# Перевірити незбережені зміни
git diff
# Додати потрібні зміни до staging area
git add файл.txt
# Перевірити підготовлені зміни
git diff --staged
# Створити коміт
git commit -m "Зрозумілий опис зміни"
# Переконатися, що робоче дерево чисте
git statusЯкщо після коміту Git повідомляє, що робоче дерево чисте, це означає, що у working tree і staging area немає змін, яких ще немає в останньому коміті.
git add створює комітgit add лише додає зміни до staging area. Для створення коміту потрібна окрема команда:
git commit -m "Опис зміни"git commit без git addКоміт містить лише те, що є у staging area. Якщо змінений файл не додати командою git add, його зміни не потраплять до коміту.
git diff і git diff --stagedgit diff показує зміни, які ще не підготовлено.
git diff --staged показує зміни, які вже підготовлено до коміту.
git add додає файл назавждиgit add додає до staging area поточний стан файлу. Якщо після цього змінити файл ще раз, нова зміна автоматично не буде підготовлена. Потрібно повторно виконати:
git add файл.txtКоманда:
git add .може додати більше файлів, ніж ви планували. Перед комітом перевіряйте:
git status
git diff --stagedWorking tree — файли, які ви створюєте та редагуєте.
Staging area — список змін, підготовлених до наступного коміту.
Repository — локальне сховище комітів та історії Git.
git add переміщує зміни з working tree до staging area.
git commit зберігає зміни зі staging area у repository.
git status показує стан усіх трьох областей.
git diff переглядає непідготовлені зміни.
git diff --staged переглядає підготовлені зміни.
git restore --staged прибирає зміни зі staging area, не скасовуючи їх у файлі.