3

Как можно отменить последние 5 коммитов в git?

Схема работы такая:
В phpstorm сделал 5 коммитов на бедро, затем push, после чего на стороне сервера стянул эти изменения в проекте и все побилось. Как на стороне сервера отменить последние 5 pulls?

Jony
  • 1,998

2 Answers2

6
git reset --hard HEAD~5

Я надеюсь, что правильно понял, что нужно отменить 5 коммитов, а не "5 pulls". Посмотрите внимательно, возможно, что придётся откатить ещё merge commit.

Разделяйте систему контроля версий и деплой. Почитайте про capistrano.

pirj
  • 2,154
  • Нужно отменить "5 pulls" с ведра – Jony Feb 28 '15 at 13:23
  • 5 pulls отменить не получится, потому что информации о том, сколько именно pull'ов вы делали, не хранится, кроме того редкого случая, когда вы делаете merge commit на каждый pull.

    Вы можете отменить несколько commit'ов тем способом, который я указал.

    – pirj Feb 28 '15 at 13:36
  • а зачем? Сделайте реверт коммитов и все, иначе только push --force, но это плохая идея - всем, кто уже сделал пулл, придется восстанавливаться вручную. В этом случае лучше аккуратно revert сделать (как вариант git checkout COMMITID -- * (может, force нужно будет сделать, не знаю) git commit -am "sorry i'm idiot, pushed to production by accident :(" – zb' Feb 28 '15 at 13:36
  • Версия, во-первых, не продакш, а dev. Во-вторых, git checkout COMMİTİD - * дает: fatal: invalid reference: COMMITID. Так и не понял - что можно в таком случае сделать – Jony Feb 28 '15 at 13:42
  • аааа COMMITID это номер коммита последней хорошей версии и не - а -- – zb' Feb 28 '15 at 13:49
  • 1

    сколько именно pull'ов вы делали, не хранится

    ну не совсем, немножко все таки хранится. смореть git reflog.

    – KoVadim Feb 28 '15 at 14:15
  • Ребята - как можно отменить push? – Jony Feb 28 '15 at 16:19
  • я попробовал git revert , пишет, что не обновилось – Jony Feb 28 '15 at 16:34
3

Я так понимаю, вам на стороне сервера нужно не только файлы откатить, но и сам репозиторий. Поэтому приемлем такой вариант.

# выполняем на локальном репозитории
# стоит создать ветку-бэкап для неудачных коммитов
git branch backup
git reset --hard HEAD~5
# и теперь push --force
git push --force origin mybranch

#потом на сервере приводим файлы в соответствие с последним коммитом
git reset --hard

Более общий вопрос и ответ: Как вернуться (откатиться) к более раннему коммиту?

Nick Volynkin
  • 34,094