
Я сделал несколько коммитов. Затем мне пришлось вернуться к коммиту в середине. Внес изменения там и создал новую ветку. Теперь я хочу пропустить (удалить, удалить) все остальные коммиты и использовать ветку в качестве главной версии. Но не могу понять, как это сделать.
Вот некоторые пояснения ситуации:
commit1 (latest)
commit2
commit3 (head pointing here)
other commits...
В момент commit3
, я внес изменения и создал новую ветку, чтобы их опубликовать.
Теперь я хотел бы сделать версию ветки основной, удалив commit2
и commit1
.
решение1
Поскольку вы надавили, то наименее вероятный вариант, который может что-то сломать, это, вероятно git revert
:
git checkout master
git revert commit1 commit2
git merge new-branch
git push
Обратите внимание, что это приведет к тому, что в ветке master будут точно такие же файлы, как и в новой ветке, но коммит1 и коммит2 по-прежнему будут находиться в истории ветки master, как и два дополнительных коммита, отменяющих изменения.
НЕ РЕКОМЕНДУЕТСЯ
Если вы действительно хотите удалить коммиты, которые вы уже отправили из 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
уже отправленных коммитов).