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

Posted by PDSW on Monday, October 30, 2017

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

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

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

$ git checkout develop
$ git revert {git-hash} -m 1 # где {git-hash} это хэш идентификатор коммита c мержом пулл-реквеста 
    # здесь -m 1 [говорит](https://git-scm.com/docs/git-revert#git-revert--mparent-number) что нужно отменить именно мерж коммит
$ git push origin develop

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

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

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

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

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

  1. Пока Вас не сожгли пушим ревёрт мержа на орджин
  2. После востановления кармы мёржим в наш фичебранч ревёрт и ещё раз его ревёртим.
  3. Пишем фикс и отправляем ещё один пулл-реквест

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


comments powered by Disqus