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

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

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

Введение

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

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


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

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

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

Сначала убедитесь, что вы находитесь в директории my-time-machine. Вы можете сделать это, введя следующую команду:

cd ~/project/my-time-machine

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

git status

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

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

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

  • On branch master: Это сообщает, что вы в данный момент находитесь на ветке master. Ветки (branches) похожи на разные временные линии в вашем проекте.
  • Your branch is up to date with 'origin/master': Это означает, что ваша локальная ветка master синхронизирована с удаленной веткой origin/master (мы позже узнаем больше о удаленных репозиториях).
  • nothing to commit, working tree clean: Это идеальное состояние! Это значит, что в вашем проекте нет изменений, которые не были сохранены (закоммичены) в истории Git.

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

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

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

Сначала внесем изменения в файл message.txt. Убедитесь, что вы по-прежнему находитесь в директории ~/project/my-time-machine.

Откройте файл с помощью редактора nano:

nano message.txt

Добавьте новую строку в файл, например:

Hello, Future Me
This is a new line.

Нажмите Ctrl + X для выхода, затем Y для сохранения и Enter для подтверждения имени файла.

Теперь, когда мы внесли изменения в файл, посмотрим, как Git воспринимает эти изменения с помощью команды git status:

git status

Вы должны увидеть вывод, указывающий, что файл message.txt был изменен:

On branch master
Your branch is up to date with 'origin/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 был изменен (modified), и изменения не подготовлены к коммиту (not staged for commit). Это означает, что мы изменили файл, но еще не сообщили Git, что нужно подготовить эти изменения к коммиту.

Теперь используем команду 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
+This is a new line.

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

  • Строки, начинающиеся с --- и +++, показывают исходный файл (a/message.txt) и новый файл (b/message.txt).
  • Строка, начинающаяся с @@, называется "заголовком фрагмента" (hunk header). Она показывает, где в файле произошли изменения. -1 +1,2 означает, что начиная с первой строки в исходном файле была удалена одна строка, а начиная с первой строки в новом файле были добавлены две строки.
  • Строки, начинающиеся с -, показывают удаленные строки.
  • Строки, начинающиеся с +, показывают добавленные строки.

В нашем случае мы добавили одну строку, поэтому вы увидите строку, начинающуюся с +.

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

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

Совмещение проверок подготовленных и неподготовленных изменений

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

Напомним, что на предыдущем этапе мы внесли изменения в файл message.txt, но не подготовили эти изменения к коммиту. Теперь подготовим изменения с помощью команды git add:

git add message.txt

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

git status

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

On branch master
Your branch is up to date with 'origin/master'.

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

Git теперь показывает Changes to be committed, что означает, что изменения в файле message.txt находятся в области подготовки (staging area) и готовы к следующему коммиту.

Что произойдет, если мы запустим команду git diff сейчас?

git diff

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

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

git diff --staged

Или, что то же самое:

git diff --cached

Обе команды выполняют одну и ту же функцию. Запустим ее:

git diff --staged

Теперь вы должны увидеть различия между подготовленными изменениями и последним коммитом:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+This is a new line.

Это показывает точное изменение, которое мы внесли: добавление строки "This is a new line.".

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

Резюме

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

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