Отменить ускоренное слияние
Я внес некоторые изменения в мой репозиторий git, который я хочу отменить.
My git repo выглядел так:
A-B---- master
\ /
C-D * develop
Я был на ветке develop
, забыл, что он отличается от ветки master
, сделал изменение на develop
, объединил его в master
, а затем нажал на мой пульт (называемый publish
).
Поскольку никаких изменений в мастере не было, так как B (общий предок), git выполнял быструю смену.
Теперь мое репо выглядит следующим образом:
A-B-C-D master, develop, remotes/publish/master, remotes/publish/develop.
Я хотел бы вернуть последнее слияние, восстановив master
до B.
Из того, что я читал в Как отменить последний коммит в Git?, я использовал git reset sha-of-B
для восстановления ветки master
до версии Б.
Вопросы:
- Как восстановить
develop
до версии D?
- Как мне затем вернуть эти изменения в удаленный/публиковать?
Ответы
Ответ 1
Если вы reset мастер ветки, он не коснется разветвления ветки. Чтобы получить все по порядку, вы должны сделать:
git checkout master
git reset --hard sha-of-B
git checkout develop
git reset --hard sha-of-D
git checkout master
git merge develop --no-ff
Ответ 2
- представьте, что вы все еще на хозяине, где вы слились и нажали
-
git reset --hard @{1}
- reset, где он был на один шаг назад на вашем компьютере (то есть "B" )
- для разработки ничего не делать, потому что он должен быть все еще на "D"
-
git push publish develop --force-with-lease=master
- push-ветвь обычно развивается
- также нажмите ведущий мастер, а именно назад, но безопасным образом
Ответ 3
Если вам кажется, что вы были проверены на develop
, когда вы запустили git reset
, и это то, что вас задело.
Вы можете исправить develop
следующим образом:
git checkout develop
git merge --ff-only D
Теперь вы можете восстановить master
обратно в B:
git checkout master
git reset --hard B
Вернитесь к develop
и нажмите его:
git checkout develop
git push develop