![image](https://habrastorage.org/webt/-k/ba/po/-kbapoxswypiw76az7hgkl11gao.png)
Ничего не предвещало.
Внезапно рабочий чат зашелестел сообщениями:
– Почему мой пулл реквест удалили?
– И мои пулл реквесты грохнули!
– И мой!
Спустя буквально несколько минут инвестигаций мы выяснили, что это случилось, потому что кто-то удалил рабочую ветку Bootstrap, куда более чем 40 человек контрибьютили более трёх месяцев. Ещё раз, чтобы можно было осознать всю величину проблемы – сорок человек вливали туда код на протяжении более трёх месяцев.
![image](https://habrastorage.org/webt/ag/8d/fj/ag8dfjgg-h6uurkeeqspq6ehfis.png)
Коллеги тут же стали фонтанировать идеями о том, что мы все имеем локальные копии этой ветки, и давайте создадим эту ветку с нуля.
По своему опыту я знаю, что поспешные решения и импровизация не приводят ни к чему хорошему, поэтому я попросил всех не предпринимать никаких действий и буквально «убрать руки с клавиатуры».
![image](https://habrastorage.org/webt/oi/-q/qa/oi-qqa12sbi0pzr7e0qv7hdfycw.png)
Итак, диспозиция – пятница, вечер, уже почти пустой офис, потерянная ветка с огромной кодовой базой. Если не решить эту проблему здесь и сейчас, то есть вероятность, что ситуация станет хуже, если на выходных к работе подключатся другие разработчики, которые не в курсе текущей ситуации (мы же все аккуратно читаем рабочий чат, не так ли?).
Я вежливо спросил в чате, кто удалил ветку Bootstrap, и один молодой разработчик, которого включили в работу совсем недавно, признался, что это сделал он по ошибке. «Простите».
![image](https://habrastorage.org/webt/ws/et/v_/wsetv_qqhecr929dft5kdpguynw.jpeg)
Я хватаю удачно подвернувшегося под руку специалиста, и мы мчимся к молодому разработчику, который в этот момент переживает экзистенциальный кризис, и чьё рабочее место, по счастливой случайности, находится в том же офисе, что и мы.
Ветку мы, конечно, восстановили – немного git магии, и всё получилось. Чего не скажешь о более чем 20 пулл реквестах, которые так и сгинули в недрах GitHub`а. Неприятно, но не смертельно.
Время перевести дух, разобраться в произошедшем и сделать некоторые выводы.
![image](https://habrastorage.org/webt/q6/5x/bi/q65xbicceq5nhhf_hbdp20uu3ge.png)
Главный вопрос – зачем? Ответ, в общем-то, тривиальный – случайно. Что-то было не так с кодом, который был закомитан в собственную рабочую ветку – ничего криминального, просто некрасиво код был написан, а если даже ревертишь коммит, то он все равно остается в истории. Поэтому разработчик решил снести всю свою рабочую ветку и создать заново. С чистого листа. И под горячую руку попалась ветка Bootstrap. Пятница. Вечер. Мисклик, да.
![image](https://habrastorage.org/webt/k3/hp/zn/k3hpzn1do31vf_edxsawm9_97es.png)
GitHub позволяет отменить операцию удаления, но только до момента, пока страница не обновлена, и этот шанс использован не был.
Можно ли было избежать этой ситуации? Да, можно. По умолчанию, любой, кто имеет write доступ к вашему репозиторию, может удалить любую ветку. Однако GitHub позволяет создать Branch protection rule для одной или более веток.
![image](https://habrastorage.org/webt/kz/gg/gp/kzgggps4z3nciotommka65_f8ny.png)
Где важно убедиться, что соответствующий чек бокс не прочекан.
![image](https://habrastorage.org/webt/ze/6i/k8/ze6ik8zt88zxwet3fobnxyo4nwy.png)
Для ветки bootstrap это сделано не было, и это нас догнало.
В сухом остатке:
MonkAlex
Написать в суппорт гитхаба не пробовали? Имхо, восстановить могли бы.
alexey_girin Автор
честно говоря — это не пришло в голову