История и изменения

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

Введение

В предыдущих лабораторных работах вы научились инициализировать «машину времени» (Git-репозиторий) и сохранять первый снимок. Но проект не остаётся неизменным: вы исправляете ошибки, добавляете возможности и обновляете документацию.

Git отлично подходит для отслеживания таких изменений. Он позволяет:

  1. Проверять изменения: точно видеть, какие строки вы изменили, прежде чем сохранить их.
  2. Просматривать историю: возвращаться к каждому ранее сохранённому снимку и узнавать, кто, что и когда изменил.

В этом и заключается настоящая ценность системы контроля версий: она не просто хранит резервные копии, а сохраняет структурированную историю изменений проекта.

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

Измените файл проекта

Начнём с репозитория, в котором уже есть один коммит — «Initial commit». Смоделируем выполнение работы над этим проектом.

Перейдите в каталог проекта:

cd /home/labex/project

Проверьте текущее содержимое файла readme.txt:

cat readme.txt

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

Измените файл, добавив в конец новую строку. Добавим простое описание:

echo "Git is a version control system" >> readme.txt

Убедитесь, что файл изменился:

cat readme.txt

Вывод:

Hello World
Git is a version control system

Git обнаружил, что readme.txt отличается от версии, сохранённой в последнем снимке. Теперь файл считается изменённым (Modified).

Проверьте изменения с помощью Git Diff

Прежде чем сохранять результат работы, рекомендуется точно проверить внесённые изменения. Это похоже на вычитку сочинения перед сдачей.

Для этого Git предоставляет команду diff. Она сравнивает файл в рабочем каталоге с файлом из последнего коммита (снимка).

Таким образом, git diff сравнивает два состояния: то, что сохранено в истории, и то, что сейчас находится в рабочем дереве. Это один из основных инструментов проверки работы перед её окончательной фиксацией.

Выполните git diff, чтобы увидеть изменения:

git diff

Проанализируйте вывод:

diff --git a/readme.txt b/readme.txt
index ...
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 Hello World
+Git is a version control system
  • --- a/readme.txt: исходная версия (старая).
  • +++ b/readme.txt: текущая версия (новая).
  • +Git is...: знак плюса (+) означает добавленную строку. (Знак минуса - указывал бы на удалённую строку.)

Умение читать вывод diff — важный навык работы с Git, поскольку он показывает изменения на уровне строк. На этой же идее основаны многие последующие процессы: проверка кода, применение исправлений и pull request.

Этот шаг подтверждает, что изменения соответствуют вашему замыслу.

Сохраните изменения с помощью Git Commit

Теперь, когда вы проверили изменения, сохраните новый снимок. Помните о двухэтапном процессе: подготовка (Stage) — поместить изменения на погрузочную площадку, и коммит (Commit) — сделать снимок.

Сначала проверьте состояние:

git status

Файл readme.txt будет показан красным цветом в разделе «Changes not staged for commit».

Подготовьте файл:

git add readme.txt

Снова проверьте состояние:

git status

Теперь readme.txt будет показан зелёным цветом в разделе «Changes to be committed».

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

Зафиксируйте снимок с понятным сообщением:

git commit -m "Add description about Git"
  • -m: позволяет сразу указать сообщение коммита.
  • Сообщение должно описывать, что именно вы изменили.

Теперь в истории проекта сохранена вторая версия!

Просмотрите историю проекта

Теперь в вашем репозитории есть два коммита. Чтобы увидеть хронологию проекта, используйте команду git log. Это ваша «книга истории».

Просмотрите полный журнал:

git log

Изучите вывод:

commit 8d3a1b2... (SHA Hash)
Author: Your Name <you@example.com>
Date:   Mon Oct 10 10:00:00 2023 +0000

    Add description about Git

commit 4f2b3c4... (SHA Hash)
Author: Your Name <you@example.com>
Date:   Mon Oct 10 09:00:00 2023 +0000

    Initial commit
  • SHA Hash: длинная строка идентификатора, например 8d3a.... Это уникальный отпечаток конкретного снимка.
  • HEAD: если отображается, указатель, показывающий ваше текущее положение.
  • Порядок: самый новый коммит всегда находится вверху.

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

(При необходимости нажмите q, чтобы выйти из просмотра журнала.)

Просмотрите сокращённую историю

Если работать над проектом несколько месяцев, полный вывод git log может стать слишком длинным и подробным. Иногда нужен только краткий список.

Для этого Git предоставляет параметр --oneline.

Выполните команду сокращённого журнала:

git log --oneline

Проверьте вывод:

8d3a1b2 Add description about Git
4f2b3c4 Initial commit

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

Задание:

Ещё раз измените readme.txt (добавьте новую строку), зафиксируйте изменение и снова выполните git log --oneline. Вы должны увидеть три записи!

Итоги

В этой лабораторной работе вы научились управлять жизненным циклом изменений в проекте:

  1. Изменить: вы внесли изменения в файл.
  2. Проверить: вы использовали git diff, чтобы проверить эти изменения.
  3. Зафиксировать: вы сохранили постоянный снимок с помощью git add и git commit.
  4. Просмотреть: вы изучили хронологию с помощью git log и git log --oneline.

Эти четыре команды составляют основу ежедневной работы с Git. Освойте их — и вы освоите базовые принципы контроля версий.