💙 Help Ukraine, click for information 💛

Двойной ревёрт или как жить после плохого пулл-реквеста

Oct. 30, 2017

Представте, что случилась такая ситуация, когда пулл реквест из фиче-бранча оказался немного бажным, но ревьюверы уже приняли его и вмёржили в общий девелоп. Ситуация очень неприятная, особенно если фиче-бранч ВАШ а тесты данную ситауцию почему-то сразу не раскрыли. Фактически, вы заблокировали работу всей команде или того хуже всего проекта с несколькими командами. Как на зло на исправление функционала нужно больше времени чем у вас есть, а злые девелоперы, которые не могут дальше работать уже разжигают костёр обещая Вас на нём поджарить. Что же делаааать?!

Для начала пройдёмся по процессу ответственности. Пройдя быстрый путь через отрицание -> обвинение -> оправдание -> стыд и дойдя до обязательства и ответственности начнём.

Для начала отревёртим нашу фичу с багом:

$ git checkout develop
$ git revert {git-hash} -m 1
$ git push origin develop

где {git-hash} это хэш идентификатор коммита с мержом пулл-реквеста, здесь -m 1 говорит что нужно отменить именно мерж коммит После чего можно со спокойной душой продолжить заниматься багом. Устранив баг в фичебранче (нет ну, действительно, не будете же Вы по живому на develop фиксить? :), Вы заметите, что нельзя просто так взять и смёржить свой бранч в develop - там окажется гораздо меньше изменений, чем должно было быть. Что же не так?!

Отревертав изменения в develop Вы указали, что именно там, после ревёрта будет актуальная версия состояния файлов. Что-бы исправить это нужно вмёжить ревёрт себе в ветку и отревёртить его ещё раз:

$ git checkout {feature-branch}
$ git merge develop
$ git revert {revert-hash}

Что-бы избежать возможного мёржа эту операцию имеет смысл делать до того как Вы решили делать фикс.

Итого в кратце алгоритм действия следующий:

Полезные ссылки: