Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, были ли файлы добавлены в область подготовки (staging area) в Git. Мы рассмотрим команду git status, чтобы увидеть состояние вашего репозитория и определить файлы, находящиеся в области подготовки. Затем вы будете использовать команду git diff --cached, чтобы проверить конкретные изменения, которые в настоящее время находятся в области подготовки, и получить ясное представление о том, что будет включено в ваш следующий коммит. Наконец, вы проведете тестирование с неотслеживаемыми (незагруженными в область подготовки) файлами, чтобы еще лучше понять процесс подготовки файлов к коммиту.
Проверка статуса Git для отслеживаемых (staged) файлов
На этом этапе мы проверим статус нашего Git-репозитория после добавления файла в область подготовки (staging area). Это поможет нам понять, как Git отслеживает изменения перед их фиксацией (коммитом).
Сначала убедитесь, что вы находитесь в директории my-time-machine. Вы можете использовать команду cd, чтобы перейти в эту директорию:
cd ~/project/my-time-machine
Теперь создадим новый файл с именем future_plans.txt и добавим в него некоторое содержимое:
echo "Plan 1: Build a bigger time machine" > future_plans.txt
Эта команда создает файл и записывает в него текст "Plan 1: Build a bigger time machine".
Далее мы добавим этот новый файл в область подготовки с помощью команды git add:
git add future_plans.txt
Помните, что команда git add добавляет изменения в область подготовки, подготовляя их к следующему коммиту. Она еще не создает сам коммит.
Теперь проверим статус нашего репозитория с помощью команды git status:
git status
Вы должны увидеть вывод, похожий на следующий:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: future_plans.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt ## Этот файл уже закоммичен, но Git status показывает его иначе после коммита. Не беспокойтесь об этом сейчас.
Обратите внимание на раздел "Changes to be committed:". Это означает, что файл future_plans.txt теперь находится в области подготовки и готов к включению в следующий коммит. Git распознает его как "новый файл".
Понимание области подготовки является важной частью работы с Git. Она позволяет группировать связанные изменения перед созданием коммита. Это означает, что вы можете работать над несколькими задачами, но коммитить только определенные изменения, когда они готовы.
Использование команды git diff --cached для проверки
На этом этапе мы научимся просматривать изменения, которые в настоящее время находятся в области подготовки (staging area). Именно здесь пригодится команда git diff, особенно с опцией --cached.
Убедитесь, что вы по-прежнему находитесь в директории ~/project/my-time-machine.
Ранее мы добавили файл future_plans.txt в область подготовки. Теперь используем команду git diff --cached, чтобы увидеть, какие именно изменения были добавлены в область подготовки:
git diff --cached
Вы должны увидеть вывод, похожий на следующий:
diff --git a/future_plans.txt b/future_plans.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/future_plans.txt
@@ -0,0 +1 @@
+Plan 1: Build a bigger time machine
Разберем этот вывод:
diff --git a/future_plans.txt b/future_plans.txt: Эта строка показывает, что Git сравнивает две версии файлаfuture_plans.txt.new file mode 100644: Это означает, чтоfuture_plans.txt- новый файл.index 0000000..a1b2c3d: Это внутренние идентификаторы Git для содержимого файла.--- /dev/nullи+++ b/future_plans.txt: Эти строки показывают, что файл сравнивается с пустым состоянием (/dev/null) и новой версиейfuture_plans.txt.@@ -0,0 +1 @@: Это "заголовок фрагмента" (hunk header), который показывает, какие строки были изменены.-0,0означает, что из исходного (несуществующего) файла не было взято ни одной строки, а+1означает, что в новом файле есть одна строка.+Plan 1: Build a bigger time machine: Знак+в начале строки показывает, что эта строка была добавлена.
Команда git diff --cached показывает различия между областью подготовки и последним коммитом. Поскольку в этом репозитории мы еще не сделали ни одного коммита (кроме начального в предыдущей лабораторной работе), она показывает различия между областью подготовки и пустым состоянием.
Эта команда очень полезна для просмотра изменений в области подготовки перед их фиксацией (коммитом). Она помогает убедиться, что вы коммитируете только те изменения, которые хотите.
Нажмите q, чтобы выйти из режима просмотра различий и вернуться в командную строку.
Тестирование неотслеживаемых (unstaged) файлов
На этом этапе мы узнаем, как Git обрабатывает изменения, внесенные в отслеживаемый файл, но еще не добавленные в область подготовки (staging area). Такие изменения называются "неотслеживаемыми" (unstaged).
Убедитесь, что вы находитесь в директории ~/project/my-time-machine.
Ранее мы создали и добавили в область подготовки файл future_plans.txt. Теперь добавим еще одну строку в этот файл, не добавляя изменения в область подготовки:
echo "Plan 2: Invent a self-folding laundry machine" >> future_plans.txt
Оператор >> добавляет текст в существующий файл, а не перезаписывает его.
Теперь проверим статус нашего репозитория еще раз:
git status
Вы должны увидеть вывод, похожий на следующий:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: future_plans.txt
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: future_plans.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
Обратите внимание на новый раздел: "Changes not staged for commit:". Это говорит нам, что Git видит изменения в файле future_plans.txt, которые отличаются от версии в области подготовки. Файл помечен как "измененный" (modified).
Это ключевой концепт в Git: рабочая директория (где вы вносите изменения) отделена от области подготовки. В вашей рабочей директории могут быть изменения, которые еще не были добавлены в область подготовки.
Чтобы увидеть различия между рабочей директорией и областью подготовки, вы можете использовать команду git diff без каких-либо опций:
git diff
Вы должны увидеть вывод, похожий на следующий:
diff --git a/future_plans.txt b/future_plans.txt
index a1b2c3d..e4f5g6h 100644
--- a/future_plans.txt
+++ b/future_plans.txt
@@ -1 +1,2 @@
Plan 1: Build a bigger time machine
+Plan 2: Invent a self-folding laundry machine
Этот вывод показывает различия между версией файла future_plans.txt в области подготовки (которая содержит только "Plan 1") и версией в вашей рабочей директории (которая теперь содержит и "Plan 1", и "Plan 2"). Знак + снова указывает на добавленную строку.
Понимание различий между отслеживаемыми (staged) и неотслеживаемыми (unstaged) изменениями, а также способов их просмотра с помощью команд git status и git diff, является фундаментом эффективного использования Git.
Нажмите q, чтобы выйти из режима просмотра различий.
Резюме
В этой лабораторной работе мы научились проверять, добавлен ли файл в область подготовки (staging area) в Git. Мы начали с создания нового файла и добавления его в область подготовки с помощью команды git add. Затем мы использовали команду git status и увидели, что файл был перечислен в разделе "Changes to be committed", что подтвердило, что он был добавлен в область подготовки.
Мы также изучили использование команды git diff --cached для просмотра конкретных изменений, которые в настоящее время находятся в области подготовки, и получили подробную информацию о том, что будет включено в следующий коммит. Наконец, мы проверили поведение команды git status с неотслеживаемыми (unstaged) файлами, чтобы различать отслеживаемые (staged) и неотслеживаемые изменения.



