Пошук уроків, статей та іншого контенту
Підготуєте окремі файли або всі зміни до коміту та зрозумієте вибіркове додавання частин файлів.
Перед створенням коміту Git зберігає підготовлені зміни в спеціальній області — Staging Area або індексі.
Команда git add переносить зміни з робочої директорії до Staging Area:
робочі файли → git add → Staging Area → git commit → історія репозиторіюВажливо: git add не створює коміт. Вона лише визначає, які зміни потраплять до наступного коміту.
Перед додаванням змін корисно виконати:
git statusПриклад результату:
On branch main
Changes not staged for commit:
modified: README.md
Untracked files:
notes.txtЦе означає:
README.md змінений, але ще не доданий до Staging Area;
notes.txt — новий файл, який Git ще не відстежує.
Після додавання файлу статус зміниться:
git add README.md
git statusТепер файл буде показано в секції Changes to be committed.
Щоб додати до Staging Area один конкретний файл, передайте його шлях команді git add:
git add README.mdДля файлу у вкладеній директорії:
git add src/app.jsПісля цього до майбутнього коміту буде підготовлено лише цей файл.
Інші змінені файли залишаться поза Staging Area:
git statusЦе зручно, коли ви працювали над кількома завданнями, але хочете створити окремий коміт лише для одного з них.
Можна вказати кілька файлів в одній команді:
git add README.md package.jsonТакож можна додати всі зміни всередині певної директорії:
git add src/Ця команда підготує зміни у файлах директорії src та її вкладених директорій.
Щоб додати всі зміни в поточній директорії та її вкладених директоріях, використовують:
git add .Команда підготує:
нові файли;
змінені файли;
видалені файли в межах поточної директорії.
Щоб додати всі зміни в усьому репозиторії, незалежно від поточної директорії, використовуйте:
git add -AОпція -A означає додавання всіх змін: нових, змінених і видалених файлів.
Після цього перевірте результат:
git statusgit add . і git add -Agit add . працює від поточної директорії вниз;
git add -A враховує весь репозиторій.
Наприклад, якщо ви перебуваєте в директорії src, команда git add . не охопить зміни у батьківській директорії. Для повного додавання всіх змін зручно використовувати git add -A.
Іноді один файл містить кілька незалежних змін, але до коміту потрібно додати лише частину з них.
Для цього використовуйте інтерактивний режим:
git add -p app.jsGit показуватиме зміни окремими блоками, які називаються hunks. Для кожного блоку можна вибрати дію:
y — додати цей блок до Staging Area;
n — не додавати цей блок;
s — спробувати розділити блок на менші частини;
q — завершити роботу;
? — показати доступні команди.
Приклад діалогу:
Stage this hunk [y,n,q,a,d,s,e,?]?Якщо зміна потрібна в коміті, введіть y і натисніть Enter. Якщо її потрібно залишити для іншого коміту, введіть n.
Нехай файл app.js містить виправлення помилки та тимчасовий вивід для налагодження. Можна додати лише виправлення:
git add -p app.jsПісля вибору потрібних блоків перевірте, що саме потрапило до Staging Area:
git diff --stagedА зміни, які залишилися поза Staging Area, можна переглянути так:
git diffНижче наведено послідовність команд для невеликого локального репозиторію:
# Створюємо тестовий репозиторій
mkdir git-add-example
cd git-add-example
git init
# Створюємо два файли
printf "Назва проєкту\n" > README.md
printf "console.log('Запуск');\n" > app.js
# Перевіряємо стан репозиторію
git status
# Додаємо лише README.md
git add README.md
# Переглядаємо підготовлені зміни
git diff --staged
# Переглядаємо зміни, які ще не підготовлені
git diff
# Додаємо app.js
git add app.js
# Переконуємося, що обидва файли підготовлені до коміту
git statusУ цьому прикладі git add README.md спочатку підготувала лише один файл. Файл app.js залишався поза Staging Area, доки його не додали окремою командою.
Команда:
git diff --stagedпоказує зміни, які вже додані до Staging Area і потраплять до наступного коміту.
Це корисна перевірка перед комітом. Вона допомагає переконатися, що:
додано правильні файли;
у коміт не потрапили тимчасові зміни;
зміни відповідають одному завданню;
випадково не додано паролі, ключі або службові файли.
Для порівняння, команда:
git diffпоказує зміни, які є у робочій директорії, але ще не додані до Staging Area.
Якщо файл додали помилково, його можна прибрати зі Staging Area, не скасовуючи самі зміни:
git restore --staged README.mdПісля цього:
зміни у README.md залишаться у робочому файлі;
файл більше не буде підготовлений до коміту.
Перевірити результат можна командою:
git statusЦя операція безпечна для незбережених у коміті змін: вона лише прибирає їх зі Staging Area.
Зазвичай підготовка коміту має такий вигляд:
# Переглянути поточний стан
git status
# Додати потрібні файли
git add src/app.js README.md
# Переглянути підготовлені зміни
git diff --staged
# За потреби виправити склад Staging Area
git restore --staged README.md
# Ще раз перевірити стан
git statusЛише після перевірки підготовлених змін створюють коміт командою git commit.
git add створить комітgit add app.jsне додає зміни до історії. Команда лише готує їх до коміту.
git add . без перевіркиКоманда може додати багато файлів, зокрема тимчасові або службові. Перед комітом завжди перевіряйте:
git status
git diff --stagedgit diff і git diff --stagedgit diff показує непідготовлені зміни;
git diff --staged показує зміни, підготовлені до коміту.
Для перевірки майбутнього коміту потрібна саме команда git diff --staged.
Якщо потрібно додати лише один файл, не використовуйте:
git add .Замість цього вкажіть конкретний шлях:
git add src/app.jsgit restore --stagedКоманда:
git restore --staged app.jsне видаляє зміни з файлу. Вона лише скасовує його додавання до Staging Area.
git add переносить зміни з робочої директорії до Staging Area.
git add file.txt додає один файл.
git add file1.txt file2.txt додає кілька файлів.
git add directory/ додає зміни всередині директорії.
git add . додає зміни від поточної директорії вниз.
git add -A додає всі зміни в репозиторії.
git add -p file.txt дає змогу вибрати окремі частини файлу.
git diff --staged показує зміни, підготовлені до коміту.
git restore --staged file.txt прибирає файл зі Staging Area, але зберігає його зміни.
Перед комітом варто перевірити і git status, і git diff --staged.