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

  • Использование Git

  • Что такое Git и что такое коммиты

  • Настройка локального репозитория в Git

  • Отслеживание и фиксация изменений в файлах в системе Git

  • Сохранение дополнительных изменений в Git

  • Управление коммитами в Git

  • Глоссарий команд в Git

Предварительные требования: как использовать Git

Вам нужно установить клиент Git на своей системе. Клиент можно загрузить здесь , а руководство по установке — здесь. Вам также потребуется файл для редактирования и отслеживания изменений. В этой статье мы пользуемся скриптом PowerShell, но можно взять и любой другой.

Что такое Git и что такое коммиты

Git — это распространенный инструмент контроля версий, который отслеживает изменения путем их фиксации (создания "коммита"). Создание коммита — это как сохранение версии файла или группы файлов. Коммит ведет учет версий файлов путем установления взаимосвязи с уникальным идентификатором (или SHA, или хешем). Этот уникальный идентификатор позволяет вернуться к ранее сохраненным в репозитории версиям файлов.

Стандартный рабочий процесс предполагает выполнение следующих действий:

  1. Извлечение файлов из удаленного репозитория;

  2. Внесение изменений в локальные файлы;

  3. Сохранение изменений;

  4. Перемещение новых файлов в репозиторий.

Однако если у вас нет основного удаленного репозитория либо перемещение или объединение кода вам по какой-то причине не нравится, можно использовать Git в своей локальной системе. Вы можете сохранить изменения в своем коде и отменить их — так вы будете иметь представление о коммитах.

1. Настройка локального репозитория Git

Начать следует с команды Git init. Эта команда инициализирует текущую папку в качестве репозитория Git. На этом примере я показываю, как инициализировать папку проекта в качестве репозитория Git.

Git init

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

Затем нам потребуется файл для отслеживания изменений. У нас есть файл скрипта PowerShell под названием myScript.ps1. Скрипт содержит цикл for, который повторяется пять раз и выводится на экран. Этот первый цикл будет моим внешним циклом. Действия, которые выполняет код, не важны — мы просто хотим показать, как происходит редактирование кода в простом скрипте.

Следующий шаг — просмотр статуса репозитория путем запуска Git status. Статус покажет, в какой ветке мы сейчас находимся. Пока просто имейте в виду, что мы на "главной" ветке (master). Также будут выделены красным цветом все новые или измененные файлы с момента последнего сохранения изменений.

2. Отслеживание и фиксация изменений в файлах в системе Git

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

Git add myScript.ps1
Git status

Теперь, когда мы отслеживаем файл в промежуточной области, нужно задать команду, чтобы зафиксировать состояние репозитория. Мы используем команду Git commit с параметром -m для создания текста с пояснениями. Текст должен быть коротким, но содержать описание изменений, которые были внесены в код. После фиксации изменений еще раз запускаем Git status чтобы убедиться, что в промежуточной области нет других файлов и в них не были внесены изменения с момента последнего сохранения.

Git commit -m “first version of script - outer loop only”
Git status

3. Фиксация дополнительных изменений

Теперь, когда у нас в репозитории есть первая запись о сохранении, нам нужно усовершенствовать свой код. Добавляем еще один цикл for во внешний цикл, к которому мы будем обращаться, чтобы добавить внутренний цикл.

При повторном запуске Git status результаты будут такими же, как и раньше. Файл не будет отслеживаться, поскольку в файл скрипта были внесены изменения с момента последнего сохранения. Повторяем алгоритм использования команд, чтобы добавить файл и сохранить его. В тексте нашего описания видно, что был добавлен внутренний цикл.

Git status
Git add myScript.ps1
Git commit -m “Added inner loop”

4. Управление коммитами в Git

Теперь, когда у нас есть несколько коммитов в репозитории, мы можем перейти к команде Git log. Эта команда покажет предыдущие коммиты и пояснения к ним. У каждого коммита есть уникальный хеш, который его идентифицирует. В этом примере последний коммит — тот, где мы добавили внутренний цикл, и он помечен как HEAD.

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

Вместо этого мы можем использовать первые семь символов значения хеша коммита для возврата к предыдущей версии. С этой целью выполняем команду Git reset с хешем коммита:

Git reset a6dd1c2

Эта команда сбрасывает HEAD до определенного коммита. На снимке экрана показано, что myScript.ps1 вернулся в промежуточную область с изменениями, внесенными после коммита a6dd1c2. При повторном выполнении команды Git log HEAD вернется к предыдущему коммиту, а коммит, где был добавлен код внутреннего цикла, будет удален.

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

Глоссарий команд в Git

Вот краткое описание каждой команды PowerShell Git, которую мы использовали, и ее назначение:

Комментарии (5)