Я столкнулся с ситуацией, когда у меня уже есть удаленный репозиторий с основной веткой и некоторой функциональной веткой, и некоторые из моих коммитов также были отправлены на удаленный сервер, теперь локально я также создал еще несколько веток, но изменения в этих локальных ветках не передаются на удаленный.
Теперь из-за некоторых требований мне нужно реструктурировать свое репо, и мне нужно сохранить мой мастер в чистоте, просто прочитав его, а затем переместить все коммиты в основной ветке в другую ветку, а также сохранить мои локальные коммиты и ветки, чтобы я мог подтолкнуть их после этих зачисток.
Я не уверен, как я могу это сделать без потери данных.
Вы можете создать ветку «главная резервная копия», используя
git checkout -b backupMaster
на вашей главной ветке.
Вы можете удалить нужную фиксацию в основной ветке, используя
git checkout master
git reset --hard HEAD~x
X должен быть номером коммита, который вы хотите удалить.
Использовать
git push origin master --force-with-lease
чтобы обновить ваш источник/мастер с помощью вашего локального сброшенного мастера.
Ваш мастер теперь будет чистым на локальном и удаленном серверах, НО, если какой-то нежелательный коммит, который вы отменили на мастере, все еще присутствует в другой ветке, вам придется отменить их в других ваших ветках, если вы не хотите возвращать их при слиянии.
https://git-scm.com/docs/git-checkout