Как проверить, добавлен ли файл в область подготовки в Git

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, были ли файлы добавлены в область подготовки (staging area) в Git. Мы рассмотрим команду git status, чтобы увидеть состояние вашего репозитория и определить файлы, находящиеся в области подготовки. Затем вы будете использовать команду git diff --cached, чтобы проверить конкретные изменения, которые в настоящее время находятся в области подготовки, и получить ясное представление о том, что будет включено в ваш следующий коммит. Наконец, вы проведете тестирование с неотслеживаемыми (незагруженными в область подготовки) файлами, чтобы еще лучше понять процесс подготовки файлов к коммиту.


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-560031{{"Как проверить, добавлен ли файл в область подготовки в Git"}} git/status -.-> lab-560031{{"Как проверить, добавлен ли файл в область подготовки в Git"}} git/diff -.-> lab-560031{{"Как проверить, добавлен ли файл в область подготовки в Git"}} end

Проверка статуса Git для файлов в области подготовки

На этом этапе мы проверим статус нашего 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) и неотслеживаемые изменения.