Отменить коммиты и применить только некоторые из них - PullRequest
0 голосов
/ 03 июля 2019

Я знаю, что об этом уже спрашивали, но я изо всех сил пытаюсь найти достаточно точный поиск, чтобы найти ответ.

В моем репо у меня плохой коммит, за которым следуют два хороших коммита.Мне нужно удалить плохой коммит, но сохранить хорошие.Как я могу это сделать?

Я полагаю, что мне нужно вернуться к первому хорошему коммиту, который следует за плохим, спрятать изменения, которые сейчас не отслежены, отменить плохой коммит, а затем повторно зафиксировать спрятанные изменения?

Редактировать:

Мой вопрос не был точным.У меня на самом деле плохое слияние, за которым следуют два хороших коммита.Я чувствую, что это другой сценарий, и на оригинальный (неправильный) вопрос уже дан ответ, поэтому я задам новый вопрос.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Быстрый ответ: просто отмените неверный коммит.

Более длинный ответ: в основном у вас есть 2 варианта здесь:

  1. 2 хороших коммита не связаны с плохим коммитом. Если они не затрагивают одни и те же файлы или одни и те же области в файле, вы можете просто отменить «плохой» коммит, и он должен работать без конфликтов.

  2. Хороший коммит связан с плохим коммитом. В этом случае у вас могут возникнуть конфликты при попытке вернуть «плохой» коммит. Как бы то ни было, даже если вы удалите хороший коммит, а затем удалите плохой коммит. Вы по-прежнему будете конфликтовать, пытаясь повторно применить хороший коммит.

Итак, суть - просто отмените неверный коммит и исправьте все конфликты, которые могут у вас возникнуть.

0 голосов
/ 03 июля 2019

Если это частная ветка, и никто другой не видел ее и не ставил себя поверх нее, подумайте о переписывании истории, чтобы удалить плохой коммит:

git checkout my-branch~3 # go to the revision previous to the one that is bad
git cherry-pick my-branch~2..my-branch # apply only the last two commit from my branch
# if you like the result
git branch -f my-branch # set my-branch where I am
git checkout my-branch

Это должно сделать

...