Как проверить, были ли изменения в файле в Git

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять изменения в вашем Git-репозитории. Мы рассмотрим основные команды Git git status и git diff для определения измененных файлов и изучения конкретных изменений, внесенных в них.

С помощью практических упражнений вы научитесь использовать команду git status для просмотра, какие файлы были изменены, и команду git diff для просмотра различий между текущим состоянием ваших файлов и последней зафиксированной версией. Вы также узнаете, как Git показывает файлы, которые не были изменены.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") subgraph Lab Skills git/add -.-> lab-560022{{"Как проверить, были ли изменения в файле в Git"}} git/status -.-> lab-560022{{"Как проверить, были ли изменения в файле в Git"}} git/diff -.-> lab-560022{{"Как проверить, были ли изменения в файле в Git"}} end

Запуск команды git status для просмотра измененных файлов

На этом этапе мы научимся использовать команду git status для просмотра изменений, внесенных в наш проект.

Сначала убедимся, что мы находимся в директории нашего проекта. Откройте терминал и введите:

cd ~/project/my-time-machine

Теперь создадим новый файл. Добавим простую строку в файл message.txt:

echo "P.S. Hope you're doing well!" >> message.txt

Символ >> добавляет текст в существующий файл, а не перезаписывает его.

Проверим содержимое файла, чтобы подтвердить изменения:

cat message.txt

Вы должны увидеть:

Hello, Future Me
P.S. Hope you're doing well!

Теперь посмотрим, как Git видит эти изменения. Запустите команду git status:

git status

Вы должны увидеть вывод, похожий на следующий:

On branch master
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:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

Git сообщает, что файл message.txt был "изменен". Это означает, что Git знает, что файл изменился с момента последнего коммита, но изменения еще не были добавлены в staging area (индекс).

Понимание команды git status является важным, так как она сообщает вам о текущем состоянии вашего рабочего каталога и staging area. Это ваш главный инструмент для определения, какие изменения вы внесли и что готово к коммиту.

Использование команды git diff для изучения изменений

На предыдущем этапе мы увидели, что команда git status сообщает, какие файлы были изменены. Но что, если мы хотим узнать точно, какие изменения были внесены? Именно для этого существует команда git diff!

Команда git diff показывает различия между вашим рабочим каталогом и последним коммитом (или staging area (индексом), в зависимости от того, как вы используете ее). Это похоже на сравнение текущей версии вашего файла с версией из последней сохраненной точки.

Давайте попробуем это. Убедитесь, что вы все еще находитесь в директории ~/project/my-time-machine и запустите:

git diff

Вы должны увидеть вывод, похожий на следующий:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Разберем этот вывод:

  • diff --git a/message.txt b/message.txt: Эта строка сообщает, что Git сравнивает две версии файла message.txt.
  • index a1b2c3d..e4f5g6h 100644: Это техническая информация о версиях файла.
  • --- a/message.txt: Это указывает на исходную версию файла (до ваших изменений).
  • +++ b/message.txt: Это указывает на новую версию файла (с вашими изменениями).
  • @@ -1 +1,2 @@: Это называется "заголовком блока изменений" (hunk header). Он сообщает, где находятся изменения в файле. -1 означает, что одна строка была удалена, начиная с первой строки (в исходном файле), а +1,2 означает, что две строки присутствуют, начиная с первой строки (в новом файле).
  • +P.S. Hope you're doing well!: Строки, начинающиеся с символа +, указывают на добавленные строки. Если бы вы удалили строку, она начиналась бы с символа -.

Команда git diff является невероятно мощным инструментом. Перед тем, как зафиксировать изменения, всегда хорошей идеей будет запустить git diff, чтобы проверить, что именно вы собираетесь сохранить. Это помогает избежать случайного коммита нежелательных изменений.

Нажмите q, чтобы выйти из режима просмотра различий и вернуться в командную строку.

Тестирование неизмененных файлов

На предыдущих этапах мы увидели, как работают команды git status и git diff, когда файл был изменен. Но что произойдет, если мы запустим эти команды, когда нет никаких изменений?

Давайте узнаем! Убедитесь, что вы находитесь в директории ~/project/my-time-machine.

Сначала запустите команду git status:

git status

Поскольку с момента последней проверки статуса мы не внесли никаких изменений, вы должны увидеть такой же вывод, как и раньше, который показывает, что файл message.txt был изменен, но изменения не были добавлены в staging area (индекс):

On branch master
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:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

Теперь давайте попробуем снова запустить команду git diff:

git diff

Вы должны увидеть такой же вывод сравнения, как и раньше, который показывает различия между текущим файлом и последним коммитом:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Это подтверждает, что команды git status и git diff показывают текущее состояние вашего рабочего каталога по отношению к последнему коммиту, независимо от того, сколько раз вы запускаете эти команды без внесения дополнительных изменений.

Теперь давайте добавим изменения, которые мы внесли в файл message.txt, в staging area с помощью команды git add:

git add message.txt

Запустите команду git status еще раз:

git status

Вывод изменится и покажет, что изменения теперь добавлены в staging area:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   message.txt

Обратите внимание, что команда git status теперь показывает "Changes to be committed" (Изменения, готовые к коммиту). Это означает, что изменения находятся в staging area и готовы к следующему коммиту.

А как насчет команды git diff теперь? Давайте попробуем:

git diff

На этот раз команда git diff не выведет ничего. Почему? Потому что когда вы запускаете команду git diff без аргументов, она сравнивает ваш рабочий каталог с staging area. Поскольку мы только что добавили изменения в staging area, рабочий каталог и staging area идентичны.

Чтобы увидеть различия между staging area и последним коммитом, вы должны использовать команду git diff --staged. Давайте попробуем:

git diff --staged

Это покажет различия в изменениях, которые в настоящее время находятся в staging area, то есть строку, которую мы добавили:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Понимание различия между git diff (рабочий каталог против staging area) и git diff --staged (staging area против последнего коммита) является ключевым понятием в Git. Это помогает вам управлять своими изменениями перед тем, как зафиксировать их.

Нажмите q, чтобы выйти из режима просмотра различий, если он появится.

Резюме

В этом практическом занятии мы научились проверять изменения в репозитории Git. Мы начали с использования команды git status для определения, какие файлы в рабочем каталоге были изменены с момента последнего коммита. Эта команда предоставляет сводку о текущем состоянии репозитория, указывая на измененные, добавленные в staging area (индекс) и неотслеживаемые файлы.

Затем мы изучили команду git diff для изучения конкретных изменений, внесенных в измененный файл. Эта команда показывает построчное сравнение между текущей версией файла в рабочем каталоге и версией в последнем коммите, выделяя добавленные и удаленные строки. Наконец, мы подтвердили, что команда git status правильно сообщает об отсутствии изменений, если в репозитории не были внесены изменения в файлы.