В мире Git‑системы и платформ для совместной разработки (GitHub, GitLab, Bitbucket) термин «подклад» обычно используется для обозначения подачи/запроса на слияние (Pull Request / Merge Request). Иногда может возникнуть необходимость отменить изменения, внесённые в репозиторий, и вернуть исходное состояние к тому, кто выполнил данный «подклад». В этой статье мы подробно разберём, как это сделать, какие подходы существуют, и какие нюансы важно учесть.
Что такое «подклад» и почему его нужно откатывать?
Подклад — это сообщение о том, что ветка готова к слиянию в целевую ветку (обычно main или master). При слиянии все изменения из ветки‑источника попадают в целевую ветку. Если:
- В коде обнаружена критическая ошибка;
- Неправильные изменения затронули несколько файлов;
- Стиль кода нарушен;
- Был загружен неверный набор файлов.
тогда необходимо откатить действие. При этом важно вернуть исходное состояние к автору данного подклада, чтобы он мог исправить проблемы и снова предложить корректный вариант.
Выбор метода отката
Существует два основных способа отката изменений в Git:
- Revert – создаёт новый коммит, отменяющий изменения, но оставляет историю.
- Reset – перемещает указатель ветки назад, удаляя коммиты из истории (может быть опасным в публичных репозиториях).
Для большинства случаев предпочтителен revert, потому что он безопасен и понятен другим участникам проекта.
Пошаговый процесс отката Pull Request
- Определите, какой коммит нужно откатить.
На GitHub откройте историю коммитов целевой ветки (обычноmain). Найдите коммит, созданный после мерж‑подклада, который нужно отменить. Скопируйте его SHA‑1 (например,abcd1234). - Создайте новый Pull Request.
Перейдите в репозиторий, нажмите кнопку «New pull request» и выберите ветку, в которой вы будете откатывать изменения (обычно создаётся новая ветка, напримерrevert-pull-request-123). - Выполните revert.
На локальной машине выполните команду:
git checkout -b revert-pull-request-123
git revert abcd1234(если это merge‑коммит, добавьте-m 1)
Затем отправьте ветку:
git push origin revert-pull-request-123 - Проверьте изменения.
Убедитесь, что новый коммит действительно отменяет нужные изменения. На GitHub вы увидите «Revert …» в заголовке PR. - Сделайте merge.
После проверки сделайте merge нового PR в целевую ветку. Теперь исходное состояние восстановлено, а автор оригинального подклада может внести исправления и открыть новый PR.
Как вернуть исходный код автору подклада
Иногда хочется не просто откатить изменения, но и отправить исходный код обратно автору, чтобы он мог изменить свой PR. Вот несколько способов:
- Создать новый PR с исходными файлами.
Скачайте репозиторий состояния до слияния (можно воспользоватьсяgit checkoutна нужном коммите), затем создайте ветку и PR, в котором только эти файлы присутствуют. Такой PR можно назвать «Restore original files for @author». - Использовать
git revertс-m 1для merge‑коммита.
Это создаст новый коммит, который полностью отменит merge. Автор сможет затем открыть новый PR с исправлениями. - Отправить патч по e‑mail.
Если проект поддерживает.diffфайлы, можно просто отправить патч автору и попросить его применить изменения локально.
Лучшие практики при откате
Документируйте причину отката
В заголовке и описании PR обязательно укажите, почему откатываем изменения, чтобы другие участники понимали контекст. Пример:
Revert "Add feature X" This reverts commit abcd1234 because the feature introduces a breaking change in the public API. The original author should update the API before creating a new pull request.
Сохраняйте историю
Никогда не используйте git reset --hard в публичных ветках. Это приведёт к конфликтам у других разработчиков.
Создавайте резервные копии
Перед крупными откатами рекомендуется создать branch‑snapshot:
git branch backup-$(date +%Y%m%d%H%M%S)
Таким образом, при ошибке вы сможете быстро восстановить состояние.
Используйте метки и комментарии
В GitHub добавьте #revert в описание PR. В GitLab используйте Revert кнопку. Это упрощает поиск откатов в истории.
Какой путь выбрать в зависимости от платформы
| Платформа | Вариант отката | Команда |
|---|---|---|
| GitHub | Revert button | Нажмите Revert на странице PR. |
| GitLab | Revert Merge Request | Нажмите Revert в правом верхнем углу страницы MR. |
| Bitbucket | Revert commit | Вкладка Commits, выберите нужный и нажмите Revert. |
Откатить действие подклада и вернуть исходное состояние к автору – часто необходимый и полезный процесс в командной работе. Главное – использовать безопасный метод revert, документировать причины отката и оставлять историю изменений прозрачной для всех участников проекта. Следуя приведённым шагам и рекомендациям, вы сможете быстро и безболезненно откатить любые изменения, сохранив при этом целостность репозитория и мотивацию автора исправить ошибки.
Если у вас возникнут вопросы по конкретному случаю, не стесняйтесь задавать их в обсуждении этого поста. Удачной разработки!