Как проверить, есть ли в репозитории Git подготовленные к коммиту изменения

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

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

Введение

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

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


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-560089{{"Как проверить, есть ли в репозитории Git подготовленные к коммиту изменения"}} git/status -.-> lab-560089{{"Как проверить, есть ли в репозитории Git подготовленные к коммиту изменения"}} git/diff -.-> lab-560089{{"Как проверить, есть ли в репозитории Git подготовленные к коммиту изменения"}} end

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

На этом этапе мы снова используем команду git status, чтобы увидеть, как Git отслеживает изменения после добавления файла.

Сначала убедитесь, что вы находитесь в директории my-time-machine. Если нет, используйте команду cd:

cd ~/project/my-time-machine

Теперь создадим новый файл с именем notes.txt и добавим в него некоторое содержимое:

echo "Ideas for the future" > notes.txt

Эта команда создает файл notes.txt с указанным текстом.

Далее, скажем Git, что мы хотим отслеживать этот новый файл. Для этого используем команду git add:

git add notes.txt

Эта команда добавляет файл notes.txt в область подготовки к коммиту (staging area). Область подготовки к коммиту - это своего рода "ожидание" для изменений перед их фиксацией (коммитом).

Теперь проверим статус нашего репозитория с помощью команды git status:

git status

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

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

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

Обратите внимание, что в выводе теперь notes.txt отображается в разделе "Changes to be committed". Это означает, что файл находится в области подготовки к коммиту и готов к включению в следующий коммит.

Вы также можете увидеть message.txt в списке "Untracked files". Это происходит потому, что мы еще не зафиксировали изменения в файле message.txt на предыдущих шагах. Git показывает нам, что в рабочем каталоге все еще есть изменения, которые не отслеживаются для следующего коммита.

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

Проверка изменений с помощью команды git diff --cached

На этом этапе мы научимся просматривать точные изменения, находящиеся в настоящее время в области подготовки к коммиту (staging area), с использованием команды git diff --cached.

Помните, что на предыдущем этапе мы добавили файл notes.txt в область подготовки к коммиту. Теперь давайте посмотрим, какие изменения Git готов зафиксировать (закоммитить).

Убедитесь, что вы находитесь в директории ~/project/my-time-machine:

cd ~/project/my-time-machine

Теперь выполните следующую команду:

git diff --cached

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

diff --git a/notes.txt b/notes.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/notes.txt
@@ -0,0 +1 @@
+Ideas for the future

Этот вывод показывает разницу между областью подготовки к коммиту и последним коммитом. Поскольку это первый раз, когда мы добавляем файл notes.txt в область подготовки к коммиту, Git отображает его как новый файл.

Разберем вывод по частям:

  • diff --git a/notes.txt b/notes.txt: Эта строка указывает, что мы сравниваем две версии файла notes.txt.
  • new file mode 100644: Это показывает, что notes.txt - новый файл.
  • index 0000000..a1b2c3d: Это внутренние идентификаторы Git для содержимого файла.
  • --- /dev/null: Это представляет "пустое" состояние до добавления файла.
  • +++ b/notes.txt: Это представляет текущее состояние файла в области подготовки к коммиту.
  • @@ -0,0 +1 @@: Это заголовок, указывающий на строки, которые были изменены. -0,0 означает, что в исходном (пустом) состоянии не было строк, а +1 означает, что в новом состоянии добавлена одна строка.
  • +Ideas for the future: Знак плюс + указывает, что эта строка была добавлена.

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

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

Проверка различий между подготовленными и неподготовленными к коммиту изменениями

На этом этапе мы будем дальше исследовать разницу между подготовленными к коммиту (staged) и неподготовленными к коммиту (unstaged) изменениями, изменив файл, который уже отслеживается Git.

Сначала убедитесь, что вы находитесь в директории ~/project/my-time-machine:

cd ~/project/my-time-machine

Теперь добавим еще одну строку в наш файл notes.txt. Мы можем использовать команду echo с оператором >> для добавления текста в существующий файл:

echo "Another idea" >> notes.txt

Эта команда добавляет строку "Another idea" в конец файла notes.txt.

Проверим статус нашего репозитория еще раз:

git status

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

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   notes.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:   notes.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

Обратите внимание, что файл notes.txt теперь появляется в двух разделах:

  1. Changes to be committed (Изменения, готовые к коммиту): Это относится к версии файла notes.txt, которую мы добавили в область подготовки к коммиту на предыдущем этапе (которая содержала только "Ideas for the future").
  2. Changes not staged for commit (Изменения, не подготовленные к коммиту): Это относится к изменениям, которые мы только что внесли в файл notes.txt (добавление строки "Another idea"). Эти изменения находятся в рабочем каталоге, но еще не были добавлены в область подготовки к коммиту.

Это ключевой концепт в Git: область подготовки к коммиту содержит снимок изменений, готовых для следующего коммита, в то время как рабочий каталог содержит текущее состояние ваших файлов, включая изменения, которые еще не были подготовлены к коммиту.

Чтобы увидеть разницу между рабочим каталогом и областью подготовки к коммиту, вы можете использовать команду git diff без каких-либо опций:

git diff

Это покажет вам изменения, которые не подготовлены к коммиту. Вы должны увидеть вывод, показывающий, что добавлена строка "Another idea".

Чтобы увидеть разницу между областью подготовки к коммиту и последним коммитом (что мы видели на предыдущем этапе), используйте команду git diff --cached.

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

Резюме

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

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