У меня недостаточно репутации, чтобы комментировать, поэтому я выложу ответ.
Если у вас есть подмодули, подход, аналогичный ответу Пасхалиса, обеспечивает более устойчивую альтернативу (cherry-pick
не учитывает подмодули) и сводит к минимуму конфликты (в моем случае ни одного).
Вот мой предпочтительный подход:
git checkout OLDSHA -b temp
git merge --squash master
git commit -m "All my work"
Где OLDSHA
- это самый старый коммит, который вы можете безопасно отправить в публичный репозиторий, а master
- это ветвь, содержащая всю вашу работу.
Это создает новую ветвь (temp
), которая "скрывает" (путем сжатия) всю историю между OLDSHA
и самым последним коммитом на master
. Сообщение для нового коммита будет «Вся моя работа».
Затем вы можете удалить master и сделать temp новым master (перед этим убедитесь, что master был благополучно перенесен в другой репозиторий или скопирован)
git branch -d master
git branch -m temp master
И нажмите на новый пульт, сохраняя ваш старый пульт нетронутым
git remote rm origin
git remote add origin NEW_URL
git push --set-upstream origin master