Сравниваем рабочее дерево с репозиторием
Представь: идёт работа над файлом 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-команды, такие как git log, могут перевести терминал в постраничный режим просмотра, с которым удобнее смотреть на длинные списки. В этом режиме можно прокручивать вывод с помощью стрелок и на клавиатуре. Для выхода нажми 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.
Пройди курс так, как задумано: порционное обучение, чёткий порядок и постепенное открытие статей в Gitопедии. В любой момент можно продолжить работу с настоящим Git прямо в VS Code, Cursor, Antigravity или Windsurf.
(требуется войти в аккаунт)