Подтвердить что ты не робот

Отменить ускоренное слияние

Я внес некоторые изменения в мой репозиторий 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?
  • Как мне затем вернуть эти изменения в удаленный/публиковать?
4b9b3361

Ответ 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