Мы случайно слили ветку XYZ в DEV и перенесли ее в исходное хранилище. Это было сделано с --no-ff для создания отдельного коммита слияния. Как только я понял неправильное слияние, я сделал git revert, чтобы создать возвращаемый коммит, и вытолкнул его. Все было хорошо, и было много радости ...
Пока мы не попытались объединить XYZ с dev. Первоначальная путаница была вызвана тем, что многие файлы, которые были добавлены в XYZ, не были найдены в объединенной ветке dev. Затем я понял, что в ветке DEV есть коммит возврата, который удалял все файлы, которые были добавлены в XYZ, а затем в DEV из-за слияния.
Вот упрощенная цепочка событий:
$ git checkout dev
$ git branch xyz
$ git checkout xyz
$ git add files/foo.xyz
$ git commit -m "blargh"
здесь происходит случайное слияние:
$ git checkout dev
$ git merged xyz
$ git push origin dev
и вот я пытаюсь спасти день:
$ git revert <SHA>
$ git push
вернуть коммит на место, все довольны
... more work happens ...
тогда, наконец, пришло время объединить xyz навсегда:
$ git checkout xyz
$ ls files/foo.xyz
files/foo.xyz
$ git checkout dev
$ git merge xyz
$ ls files/foo.xyz
File not found
Итак, мои вопросы:
a) Какой хороший способ откатить коммиты, особенно если они были перенесены в другие репо? Git Revert казалось правильным, но после проблем со слиянием я уже не уверен ...
b) Предполагая, что git revert является правильным способом сделать это, как справиться с описанным выше сценарием слияния?
PS: Я прошу прощения, если на этот вопрос уже был дан ответ, однако я не знал, что искать. Если есть ответ, пожалуйста, направьте меня к нему. Спасибо.