Как откатить два предыдущих коммита?


83

Рассмотрим этот сценарий:

  1. Разработчик A выполняет фиксацию: #n
  2. Dev. B совершает # n + 1
  3. Dev. A совершает # n + 2
  4. и фиксируем # n + 3

а затем обнаруживает, что в своей фиксации № n + 2 он ввел дефект.

Как dev. Откатить его последние 2 коммита и продолжить разработку на коммите # n + 1 ?

Пробовал git reset --hard HEAD~2* , но он возвращается к устр - х фиксации #n .


2
git reset HEAD ~ 2 должен сброситься до # n + 1 коммит, если вы вытащили B коммитов в этот момент. Вы их тянули?
Snowbear

1
... не раньше коммита # n + 2. Это было: [0] B нажал commit# n + 1, [1] A committed # n + 2, [2] неудачно push, [3] pull, [4] push. Итак, на github теперь есть коммит (# n + 2) и ветка слияния master (# n + 3).
Мариус Бутук

2
Если вы уже опубликовали коммит, вам не следует использовать сброс для его отката. (Если другой неизвестный вам разработчик сделал попытку, это вызовет боль.) Вместо этого используйте возврат и сделайте новую фиксацию, которая приведет вас к желаемому состоянию. Никогда не изменяйте опубликованную историю. См. Book.git-scm.com/…
Уильям Перселл

Ответы:


122

Он должен вернуться к фиксации n + 1. У вас, вероятно, также есть фиксация слияния. Вы также можете сделатьgit reset --hard <sha1_of_where_you_want_to_be>

ПРЕДУПРЕЖДЕНИЕ!! --hardозначает, что любые незафиксированные изменения, которые у вас есть в настоящее время, будут навсегда удалены.


2
Как мне получить sha1 удаленной фиксации (не мной)? Я пробовал использовать git reflog, но могу получить доступ только к моей локальной информации рефлога, например коммиты #n, # n + 2, # n + 3 ... но не # n + 1
Мариус Бутук

13
Я получил sha1, который хотел от a git log, но git push -fтакже требовался a , поэтому изменения будут отражены на github.
Мариус Бутук

1
Да, но я не знал, что вы тоже хотите обновить пульт :)
Адам Димитрук

25
ПРЕДУПРЕЖДЕНИЕ!! --hardозначает, что любые незафиксированные изменения, которые у вас есть в настоящее время, будут навсегда удалены. Чтобы вернуться к предыдущей фиксации без выброса вашей работы, используйте --soft.
Кен М. Хаггерти

4
Пожалуйста, объясните использование --hard вместо --soft
iuridiniz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.