Как восстановить репозиторий Git и его удаленный Github до предыдущего коммита без использования reset?

90
8

У меня есть репозиторий Git и удаленный доступ к Github. (Пожалуйста, не отредактируйте тот факт, что это на Github. Это актуально, и это имеет значение в ответе. Спасибо.)


Я хочу восстановить главную ветвь в состояние 25, завершение назад.


Я не хочу использовать git --reset hard ... и git push -f, потому что лучше не уничтожить историю.


Есть ли способ, который я могу сказать Git, эффективно...


"Сделайте все в моей рабочей копии точно так же, как это предыдущее, верните сюда, включая удаление файлов, которые не существовали тогда".


... и затем зафиксировать это состояние, а затем нажать это на пульте дистанционного управления?


Я пробовал git revert, но вот что происходит...


$ git revert --no-commit d3289a7ab82fd76386d99bdd2c5e6496ecc62529..
error: Commit e88336ec528bc87dd6df3df82280b0fbd8c5a38d is a merge but no -m option was given.
fatal: revert failed

Затем попытался...


$ git revert -m 1 --no-commit d3289a7ab82fd76386d99bdd2c5e6496ecc62529..
error: Mainline was specified but commit 84ccf1084d17d470ee03b89a7649c4a783f2b914 is not a merge.
fatal: revert failed

спросил(а) 2013-11-08T00:03:00+04:00 6 лет, 11 месяцев назад
1
Решение
108

Да, вы можете сделать (из каталога верхнего уровня):


git revert --no-commit <relevant SHA>..

Затем вы совершаете как обычно и нажмите.


Обратите внимание, что вы можете получить что-то подобное с помощью git checkout <relevant SHA> -- ., но это не удаляет файлы, которые были добавлены после соответствующего коммита.

ответил(а) 2013-11-08T00:06:00+04:00 6 лет, 11 месяцев назад
71

git revert - это, конечно, быстрый способ сделать это, но стоит упомянуть, что git reset более гибкий, чем просто --hard:


git reset --hard $commit
git reset --soft '@{1}'
git commit

Это означает:


    Измените текущую ветвь на пункт $commit. Сделайте индекс и рабочую копию похожими на $commit.
    Измените текущую ветку, чтобы указать, где она была, прежде чем вы запустили первую команду, но оставьте индекс и рабочую копию похожими на $commit. Это должно оставить вас с любыми изменениями, необходимыми для возврата в $commit.
    Commit.

ответил(а) 2013-11-08T00:36:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема