Я сделал несколько коммитов. Затем мне пришлось вернуться к коммиту в середине. Сделал там изменения и создал новую ветку. Теперь я хочу пропустить (удалить, удалить) все другие коммиты и использовать ветвь в качестве основной версии. Но не могу понять, как это сделать.

Вот некоторые объяснения ситуации:

commit1 (latest)
commit2
commit3 (head pointing here)
other commits...

В точке commit3 я внес изменения и создал новую ветку, чтобы подтолкнуть их.

Теперь я бы хотел сделать версию ветки основной, удалив commit2 и commit1 .

1 ответ1

1

Поскольку вы нажали, ваш вариант с наименьшей вероятностью сломать вещи, вероятно, git revert:

git checkout master
git revert commit1 commit2
git merge new-branch
git push

Обратите внимание, что это приведет к тому, что master будет иметь те же файлы, что и new-branch, но commit1 и commit2 останутся в истории master вместе с двумя дополнительными коммитами, отменяющими свои изменения.


НЕ РЕКОМЕНДУЕТСЯ

Если вы действительно, действительно хотите действительно удалить коммиты, которые вы уже выдавили из мастера, сначала сообщите всем своим товарищам по команде, что вы, вероятно, собираетесь что-то сломать, затем используйте git reset:

git checkout master
git reset --hard commit3
git merge new-branch
git push -f

--hard удалит все изменения, сделанные commit1 и commit2 из вашей файловой системы. Вы можете использовать --soft чтобы сохранить эти изменения в файловой системе, в то же время удаляя эти коммиты.

Возможно, вы захотите указать своим партнерам по команде документацию по восстановлению после исходной перебазировки (git reset указывает на этот раздел, когда говорит об использовании reset --hard для уже отправленных коммитов ).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .