GIT

Выделение ветки с историей в отдельный репозиторий

Предварительно надо установить пакет git-filter-repo. В Linux он устанавливается из репозитория, в Windows через pip

  1. Склонировать исходный репозиторий к себе во временный каталог
git clone <url-to-original-repo> original-repo-migration
cd original-repo-migration

На всякий случай удаляем origin, чтобы случайно не запушить изменения на сервер

git remote remove origin
  1. Отфильтровать историю
git-filter-repo --subdirectory-filter path/to/my-subdirectory --force
  1. Установить url нового репозитория как источник и отправить отфильтрованную историю в новый репозиторий
git remote add origin  <url-to-new-repo>

# main/master в зависимости от того, как называется главная ветка
git push -u origin master

Переименование рабочей ветки в main (Gitlab)

Мы работали работали, а потом решили, что то, что лежит в main мы выделяем в отдельную ветку для истории, а какую-то рабочую, которая далеко ушла, хотим сделать main. Заниматься слиянием нет смысла, поэтому хочется переименовать рабочую ветку в main.

В Gitlab надо предварительно убрать защиту ветки main. Сделать её не Default Branch и не Protected Branch

Потом попробовать переименовать ветку. В примере из branch в branch_old, но можно попытаться и в main (не проверено, потренируйтесь на тестовом репозитории).

#Checkout the branch locally.
git checkout branch

#Rename it locally
git checkout -b branch_old

#delete remote branch
git push --delete origin branch

#push the locally renamed branch to remote.
git push --set-upstream origin branch_old