Да, то, что вы описываете, должно быть легко возможным. Рассмотрим следующую историю:
A-B-C-D-E <- master
Теперь C
- это ошибочная фиксация, которую вы хотите отменить (а затем продолжить работу на этом возвращенном состоянии):
$ git checkout -b unwanted C
Вы теперь в новой ветке под названием unwanted
, которая содержит вашу ошибочную фиксацию и все, что было до (но не все после).
A-B-C-D-E <- master
^-- unwanted
Теперь верните C (создаст новую фиксацию в вашей ветке) и продолжайте работать:
$ git revert C
# hack hack hack
$ git commit
# hack hack hack
$ git commit
дает вам (C'
является откатом фиксации C
):
A-B-C-D-E <- master
\
C'-X-Y <- unwanted
Затем вы можете pu sh и создать запрос на перенос / запрос на слияние или просто слияние unwanted
обратно в master
:
$ git checkout master
$ git merge unwanted
Обратите внимание, что после слияния любые изменения C
больше не будут существовать в главном файле (они были отменены, и слияние также объединяет их обратные изменения ).