
Независимо от того, пишете ли вы скрипты самостоятельно или работаете в команде, возможность отслеживать версии кода очень важна. В этой статье мы расскажем, как использовать команду Git reset
для перехода к предыдущему коммиту в системе управления версиями Git, а также затронем следующие темы:
Использование Git
Что такое Git и что такое коммиты
Настройка локального репозитория в Git
Отслеживание и фиксация изменений в файлах в системе Git
Сохранение дополнительных изменений в Git
Управление коммитами в Git
Глоссарий команд в Git
Предварительные требования: как использовать Git
Вам нужно установить клиент Git на своей системе. Клиент можно загрузить здесь , а руководство по установке — здесь. Вам также потребуется файл для редактирования и отслеживания изменений. В этой статье мы пользуемся скриптом PowerShell, но можно взять и любой другой.
Что такое Git и что такое коммиты

Git — это распространенный инструмент контроля версий, который отслеживает изменения путем их фиксации (создания "коммита"). Создание коммита — это как сохранение версии файла или группы файлов. Коммит ведет учет версий файлов путем установления взаимосвязи с уникальным идентификатором (или SHA, или хешем). Этот уникальный идентификатор позволяет вернуться к ранее сохраненным в репозитории версиям файлов.
Стандартный рабочий процесс предполагает выполнение следующих действий:
Извлечение файлов из удаленного репозитория;
Внесение изменений в локальные файлы;
Сохранение изменений;
Перемещение новых файлов в репозиторий.
Однако если у вас нет основного удаленного репозитория либо перемещение или объединение кода вам по какой-то причине не нравится, можно использовать 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, которую мы использовали, и ее назначение:
