Как отменить слияние Git
При работе с Git очень часто случается случайное выполнение неправильного действия, но, к счастью, он создан для отслеживания истории версий вашего репозитория.
При работе с Git очень часто случается случайное выполнение неправильного действия, но, к счастью, он создан для отслеживания истории версий вашего репозитория. Всегда есть способ отменить внесенные изменения, и если вы хотите отменить слияние Git, это довольно легко.
Отмена слияния Git
По сути, есть два способа сделать это, и все зависит от того, внесли ли вы уже изменения в систему управления версиями. Если вы уже зафиксировали и отправили данные в такой сервис, как GitHub, он обычно считается неизменяемым, если только вы не хотите принудительно отправить данные, что опасно. Вы не хотите когда-либо «удалять» коммиты, а слияния git добавляются как «слияния». Вам понадобится использовать git revert
для безопасной отмены изменений и зафиксировать эту отмену как новую фиксацию.
Однако, если вы просто что-то испортили локально, ругались на клавиатуру и искали решение в Google, вы все равно можете безопасно удалить коммит слияния и сохранить чистоту своей истории Git с помощью простого git reset
.
Локальный сброс
Проще и безопаснее всего выполнять сброс Git с помощью клиента Git с графическим интерфейсом, где вы можете легко просмотреть историю ветвей. Конечно, это не обязательно, но наглядность помогает, когда у вас сложные ветки.
В этом примере мы хотим отменить слияние функциональной ветки с основной веткой. Поскольку функциональная ветка на самом деле не была затронута, мы хотим сбросить метку «основной» ветки, чтобы она указывала на последний коммит.
Для этого нам нужно git checkout
основную ветку, а затем вернуться к предыдущему коммиту. Сокращение для этого — HEAD^, и мы можем выполнить полный сброс до последнего коммита. Если вас не устраивает «разрушительный» сброс, вы можете выполнить программный сброс, а затем вручную отменить изменения фиксации слияния.
git reset --hard HEAD^
Как видите, это полностью избавляет от коммита слияния и оставляет ветку функции нетронутой.
Если коммит, который вам нужно выполнить, не является последним перед текущим HEAD ветки, вы можете просто скопировать для него идентификатор SHA1 и выполнить сброс до этого конкретного коммита.
Возврат уже отправленного коммита
К сожалению, если вы уже нажали, невозможно удалить коммит слияния, не перезаписав историю вашего репозитория. Вы можете выполнить те же шаги, что и выше, и отправить запрос в вышестоящий репозиторий (например, GitHub) с флагом --force
. Но обычно это считается деструктивным и небезопасным, если у вас несколько соавторов, поскольку всем им придется обновлять свои локальные репозитории.
Другой способ отменить коммиты в Git — отменить их. При отмене фиксации в репозитории будут применены противоположные изменения — для каждой добавленной строки эта строка будет удалена. Все удаленное добавляется обратно и так далее. Это эффективно отменяет фиксацию, но недостатком этого процесса является то, что этот процесс немного загромождает вашу историю версий. Однако в целом это хорошая практика для исправления ошибок.
Отменить коммит довольно просто. Сначала вам нужно запустить git log
, чтобы получить список коммитов и их идентификационные номера.
Затем вы можете скопировать хэш SHA1 и отменить фиксацию с помощью git revert
:
git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f
Вам нужно будет отправить этот новый «возврат коммита» на GitHub, чтобы устранить проблему.