Что делать при случайном удалении ветки develop в origin
Что проверяют
Умеете ли вы вести себя в инциденте с общей веткой: понимаете ли, где физически лежат коммиты после удаления ссылки, и не начнёте ли с действий, после которых восстанавливать будет уже нечего.
Как отвечать
Порядок такой.
Сначала стоп-сигнал в командный чат: никому не делать git fetch --prune и не чистить локальные репозитории. Пока хоть у кого-то жива ссылка origin/develop, ветка возвращается одной командой, а prune эту ссылку снесёт.
Дальше ищете самую свежую копию. У того, кто фетчил последним, remote-tracking ссылки достаточно:
git push origin refs/remotes/origin/develop:refs/heads/developЕсли develop был у кого-то рабочей веткой, вершину покажет git reflog, и тогда пушится найденный хеш. Если локальных копий нет ни у кого, остаётся хостинг: у закрытого pull request есть восстановление ветки, а недостижимые объекты на сервере живут до сборки мусора, поэтому обращаться в поддержку имеет смысл в первые часы, а не через неделю.
После восстановления сверьте вершину: хеш должен совпасть с тем, что собирал CI в последнем зелёном прогоне. И закройте дыру защитой ветки с запретом удаления и принудительного пуша.
Где спотыкаются
Считают, что git reflog покажет чужие коммиты. Reflog локальный, он хранит перемещения ссылок в вашем клоне. Если вы develop никогда не выкачивали, в вашем reflog его нет.
Торопятся и пушат первую попавшуюся локальную копию. Она может быть недельной давности, и тогда часть коммитов команды пропадает тихо, без всякого конфликта. Сначала ищем самую свежую вершину, потом пушим.
Считают инцидент закрытым, как только ветка вернулась. Открытые pull request к удалённой базовой ветке хостинг успевает закрыть, джобы CI и релизные конфигурации могли отвалиться, и возврат ссылки сам по себе этого не чинит.