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

GIT отменить коммит, который не является самым последним, rebase all commits since

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

Я попытался создать новую ветку (называемую newMaster) непосредственно перед неудачной фиксацией (с gitx), проверкой и запуском:

git rebase -i master

Какой AFAICS должен был дать мне список коммитов на master и возможность объединить или не объединить их, но вместо этого он сказал noop и быстро перенаправил newMaster равным master.

Какой самый простой способ сделать то, что мне нужно?

4b9b3361

Ответ 1

git rebase -i - это правильная команда, но вы хотите сделать это из ветки с последними изменениями и передать в ревизию, которая является "базой" операции переадресации (ревизия непосредственно перед неудачной фиксацией). Итак, если вы создали ветвь last-good-commit, которая указывает на последнюю хорошую фиксацию, вы хотели бы запустить следующую команду master:

git rebase -i last-good-commit

Ответ 2

Самый простой способ сделать то, что вы хотите, - это приостановить (или переустановить) ветку, которую вы хотите отредактировать, и запустить что-то вроде этого.

git rebase --onto <sha1-of-bad-commit>^ <sha1-of-bad-commit>

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

Ответ 3

Используя rebase, я не смог нажать изменения на пульте дистанционного управления, и моя rebase была отменена при каждом нажатии.

Мне удалось вернуть точную фиксацию (а не последнюю), просто:

git revert <sha-of-bad-commit>

И тогда я также смог нажать на удаленный