Порівнюємо робоче дерево з репозиторієм
Уяви: робота над hello.html у розпалі, аж раптом по клавіатурі пробігає бешкетний кіт і додає у файл купу нісенітниць. Замість охайного Hello, World! — сторінка, заповнена котячою абракадаброю.
Гаразд, ще раз: уяви себе котом, який намагається заснути на клавіатурі. Відкрий hello.html і понатискай випадкові клавіші, щоб зробити кілька змін (як розгребти цей безлад — побачимо за мить).
Після котячого втручання перевірмо, чи щось змінилося. git status — головна команда для таких перевірок: вона показує поточний стан робочого дерева й репозиторію.
Запусти команду git status, щоб перевірити стан репозиторію.
З виводу команди git status видно, що файл hello.html змінено:
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.html
no changes added to commit (use "git add" and/or "git commit -a")
З'ясуймо, що саме змінилося. Можна, звісно, відкрити файл і шукати котячий «внесок» очима, але це не дуже ефективно. А якщо файл великий або кіт був особливо продуктивним?
На допомогу приходить команда : вона показує, які рядки в робочому дереві відрізняються від версії в репозиторії. За замовчуванням порівняння йде з вмістом області підготовки (а туди після останнього коміту нічого нового не потрапляло, тож фактично ми порівнюємо з останнім комітом).
git diffПеревір різницю між робочим деревом і репозиторієм.
Порада: Коли вивід git diff не вміщується на одному екрані, Git може відкрити його в pager — режимі прокручування для довгого виводу. Гортати можна стрілками і . Щоб вийти, натисни q.
Має з'явитися щось таке:
diff --git a/hello.html b/hello.htmlindex 8ab686e..95f1408 100644--- a/hello.html+++ b/hello.html@@ -1 +1 @@-Hello, World!\ No newline at end of file+Hello, Meow! World! Meow! Meow! Meow!\ No newline at end of fileТакий формат виводу зазвичай називають патчем (patch), і його завдання — розповісти, що змінилося у файлі. За іронією, цей формат задумувався як зручний для людини. Щоправда, задумувався ще в 1970-х, тож до інтуїтивності сучасних інтерфейсів йому далеко. Хай там як, за трохи загадковим виглядом ховається чітка логіка. Ось як читати цей вивід:
- Перший рядок повідомляє, що diff порівнює дві версії файла
hello.html. - Другий рядок показує внутрішні метадані Git. Для розуміння змін у файлі вони не важливі.
- Рядки
---і+++зі шляхами до файлів показують, до яких файлів належать рядки з-та+. - Рядок із
@@показує номери рядків зі змінами у старій і новій версіях файла. - Рядки з префіксом
-видалено в новій версії. - Рядки з префіксом
+додано в новій версії. - Незмінені рядки показано для контексту — вони без префікса.
Цей вивід повідомляє:
- Файл
hello.htmlзмінився — про це кажуть перші кілька рядків. - Рядок
Hello, World!видалено. - Замість нього з'явився
Hello, Meow! World! Meow! Meow! Meow!
Це явний слід котячого «внеску». З git diff можна переглядати зміни рядок за рядком — так набагато легше помітити випадкові правки. А коли є чітка картина того, що змінилося, можна вирішувати: залишити зміни, викинути їх чи доопрацювати.
Команда git diff приймає різні аргументи для порівняння різних речей. Наприклад, git diff HEAD порівнює робоче дерево з останнім комітом поточної гілки, а git diff 4620193 example.html порівняє файл example.html у робочому дереві з версією з коміту 4620193.
На наступному кроці ми позбудемося котячої абракадабри й повернемо оригінальний Hello, World! за допомогою ще однієї корисної команди Git.
Проходь курс так, як він і задуманий: маленькими порціями, у сфокусованому лінійному порядку, поступово відкриваючи статті Gitopedia. Будь-коли можна продовжити зі справжнім Git у VS Code/Cursor/Antigravity/Windsurf.
але потрібен вхід