Если точка, в которой произошла ошибка, не слишком далеко в истории, вы можете рассмотреть следующий процесс восстановления:
1) Создайте ветку исправлений из своего мастера и работайте над ней, чтобы быть более безопасной
2) git log
, чтобы найти последний хороший коммит перед слиянием, где все пошло не так. Скопируйте или запишите хеш коммита для дальнейшего использования.
3) git reset --hard <commit_hash_you_spotted_as_good>
4) Затем, для каждой функции, разработанной с тех пор, и вы хотите вернуться, давайте рассмотрим две возможности:
(в этот момент вы можете посмотреть либо логи, либо графическое представление вашего дерева, но я бы предложил последнее)
а) ветка была создана из мастера ДО того, как все пошло не так:
-> просто объединить эту функцию в ветке исправлений, должно быть довольно просто
b) ветка была создана из уже испорченной версии master
-> git log снова, чтобы отметить каждый коммит в этой ветке и снова выбрать их в ветке исправлений с помощью git cherry-pick <commit_id>
4) протестируйте все в вашей ветке исправлений, чтобы подтвердить, что все в порядке, как вы и хотели
5) затем вернитесь в основную ветку, сбросьте ее до упора, как вы делали для ветви исправлений (та же самая последняя хорошая фиксация), и объедините ветку исправлений в