Вы сталкивались с ошибками или проблемами при работе с коммитами Git? Возможно, был сохранен неверный секрет или чувствительные данные. К счастью, вы можете обработать свои файлы с помощью Git, удалить их из коммита и исправить историю.
Если вы сделали несколько коммитов или клонировали репозиторий с уже существующей историей коммитов, вероятно, вы захотите просмотреть, какие все коммиты были сделаны. И в этом руководстве вы узнаете, как удалить запись из истории Git.
Читайте далее и спасайтесь с помощью Git!
Пререквизиты
Этот учебник включает пошаговые инструкции. Если вы хотите следовать за ними, убедитесь, что у вас есть следующее:
- A local machine to test the Git commands – This tutorial uses Windows 10, but later versions will also work.
- Git Bash – В этом учебнике используется Git Bash 2.36.
Удаление файла из коммита Git
Когда вы работаете с Git в команде, вы делаете сотни коммитов ежедневно. В результате существует высокая вероятность того, что вам может понадобиться отменить конкретный коммит, например, из-за неправильного файла или нескольких файлов. Это обычно вызвано изменением кода или конфигурации и становится проблемой.
Чтобы решить эту проблему, вам потребуется удалить файл или несколько файлов из коммита Git с помощью команд Git. Вы будете использовать один из популярных инструментов для удаления одного файла из коммита Git – инструмент Git Bash.
1. Откройте инструмент Git Bash на вашем компьютере с Windows.
2. Затем выполните следующую команду для создания папки репозитория и переключитесь на эту папку. Эти команды не выводятся на терминал. Но убедитесь, что замените ~/Desktop/Repository/repo1 на ваш путь и имя предпочтительной папки.
3. Выполните следующие команды, чтобы инициализировать ваш репозиторий и создать два текстовых файла с именами test1.txt и test2.txt.

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

5. Выполните команду git add ниже, чтобы добавить два текстовых файла, созданных на шаге три (test_file1.txt и test_file2.txt), в ваш локальный репозиторий.
Эта команда не выводит результат, но добавляет файлы без их отправки в удаленный репозиторий.
6. Затем выполните команду git commit ниже, чтобы Git отслеживал прогресс и изменения, сделанные в локальном репозитории.

7. После фиксации выполните нижеприведенную команду, чтобы удалить определенный файл (test_file2.txt) из коммита Git.

8. Наконец, перезапустите команду git status ниже, чтобы проверить состояние репозитория.
Как видно ниже, файл был удален из области подготовки (коммит Git) и отображается как файл (test_file2.txt) в разделе Неотслеживаемые файлы.

Удаление всех недавно зафиксированных файлов
Вы только что узнали, как удалить определенный файл из коммита Git. Но обычно вам придется удалить несколько файлов, и Git справится с этим с помощью команды git reset. Команда git reset – это сложный, но в то же время универсальный инструмент для отмены изменений в репозитории.
Чтобы увидеть, как работает git reset, вы зафиксируете несколько файлов, а затем сбросите изменения, чтобы удалить недавно зафиксированные файлы, хранящиеся в коммите Git:
1. Создайте два новых текстовых файла с именами test_file3.txt и test_file4.txt в папке ~/Desktop/Repository/repo1.
2. Затем выполните команду git add ниже, которая не выводит результат, но добавляет новые текстовые файлы в ваш локальный репозиторий (~/Desktop/Repository/repo1).
3. Выполните команду git commit ниже, чтобы зафиксировать файлы, чтобы Git отслеживал прогресс и изменения, внесенные в репозиторий.

4. Теперь выполните нижеуказанную команду, чтобы проверить состояние вашего локального репозитория.
Как видно ниже, вывод показывает сообщение “nothing to commit”, указывая на то, что все находится в порядке в репозитории.

5. Затем выполните команду git reset ниже, чтобы отменить недавно сделанные коммиты на шаге три. Эта команда не предоставляет вывод, но удаляет файлы test_file3.txt и test_file4.txt.
Также можно использовать git reset –soft HEAD^ для удаления всех файлов, которые были зафиксированы до этого.
6. Затем повторно выполните команду git status ниже, чтобы проверить состояние репозитория.
Ниже вывод показывает файлы test_file3.txt и test_file4.txt, которые нужно зафиксировать. Этот вывод указывает на файлы, которые нужно удалить из коммита Git.

Удаление конкретных коммитов из истории Git
Удаление всех зафиксированных файлов отлично работает, если вы хотите начать с чистого листа. Но что если вам нужно удалить только определенный коммит? Команда git revert справится с этим, если вы знаете идентификатор коммита.
На последнем этапе раздела “Удаление всех недавно зафиксированных файлов” вы заметили, что коммиты не были зафиксированы, а были изменены. Теперь вы сделаете коммит, чтобы увидеть команду git revert
в действии.
Выполните команду git commit
ниже, чтобы зафиксировать последние изменения в вашем локальном репозитории.
После выполнения команды вы заметите, что оба текстовых файла снова зафиксированы, и идентификатор фиксации – 0315b85,, как показано ниже.

Теперь выполните команду git revert
ниже, чтобы отменить предыдущую фиксацию. Обязательно замените 0315b85
на идентификатор вашей фиксации.
Ниже вы видите, что два файла, которые вы недавно зафиксировали, были удалены.

Удаление каталога из истории фиксаций Git
К этому моменту вы уже знаете, как удалить зафиксированный файл, но как насчет каталога? Удаление каталога из фиксации Git аналогично удалению файлов.
1. Выполните следующие команды, которые не выводят результат, но выполняют следующее:
- Создайте папку с именем
myfolder
внутри вашего локального репозитория (~/Desktop/Repository/repo1).
- Создайте файл с именем l.txt внутри папки ~/Desktop/Repository/repo1/myfolder.
2. Затем выполните git-команды ниже, чтобы добавить новую папку (~/Desktop/Repository/repo1/myfolder) в ваш локальный репозиторий.

3. Выполните следующую команду git rm, чтобы удалить папку (myfolder), зафиксированную на шаге два.

4. Наконец, выполните команду git status, чтобы проверить статус репозитория и убедиться, что папка была удалена.
Ниже вы видите, что весь каталог (myfolder) был успешно удален, вместе с файлом l.txt внутри.

Заключение
В этом уроке вы узнали, как работать с коммитами Git, такими как удаление определенного коммита, файла или нескольких файлов. Вы также коснулись удаления целой папки в локальном репозитории и фиксации изменений.
На данном этапе вы можете уверенно фиксировать изменения в вашем репозитории и удалять коммиты, которые считаете ненужными, не навредив всему.
Исходя из того, что вы узнали в этом уроке, какой метод, по вашему мнению, может быть отличным для работы с коммитами для вашей команды?
Source:
https://adamtheautomator.com/git-and-remove-from-commit/