Как я могу полностью очистить главную ветку в Git?

Я хотел бы полностью очистить главную ветку в Git. На данный момент я также хотел бы сохранить все другие ветви, которые были разветвлены от мастера.

возможно ли это и как?

5 ответов


это на самом деле называется "удалить старую главную ветку и создать новую с нуля"

это создаст новую главную ветвь, указывающую на начальную фиксацию:

git branch -D master
git checkout -b master <initial commit hash>

это создаст совершенно новую главную ветвь, не связанную с тем, что у вас было:

git branch -D master
git checkout --orphan master
git rm -rf *

но на самом деле вы можете просто сохранить текущий репозиторий в другом месте и создать новый репозиторий.


создать сиротскую ветку

во-первых, вам нужно переместить или удалить текущую главную ветку. Лично я предпочитаю отодвинуть его в сторону, а не удалять. После этого вы просто создаете новую ветку без родителей, используя --orphan флаг. Например:

git branch -m master old_master
git checkout --orphan master

поскольку текущая ветка теперь не имеет истории, некоторые команды могут завершиться с ошибками, такими как fatal: bad default revision 'HEAD' до тех пор, пока вы не сделаете свой первый коммит на новой главной ветви. Это нормально, и то же самое поведения вы видите в свеже-инициализации хранилища.


вы можете попытаться сбросить главную ветвь до первой фиксации с помощью git checkout master; git reset --hard ${sha-of-first-commit} а затем измените эту первую фиксацию, чтобы удалить файл s в ней.

Это должно дать вам первозданную главную ветвь и оставить все остальные нетронутыми, но так как вы переписываете историю, весь репозиторий, который клонировал ваш, должен быть исправлен.


Как насчет проверки в главной ветви вашего локального репозитория и удаления всего. затем нажмите эту ветвь на удаленную ветвь (origin)

удалить ли вы пустое содержимое главной ветви или самой ветви?


вот что, вероятно, плохая практика, но работает в варенье (здание поверх решения aragaer)

git branch -D master
git checkout --orphan master
git rm -rf *

после этого, чтобы отправить PR в эту ветку из ветки разработки, над которой в настоящее время работает без проблем, сделайте

git checkout development-branch-name
git rebase master
git push -f development-branch-name

теперь вы можете отправить PR от development-branch-name на master без There isn't anything to compare. Nothing to compare, branches are entirely different commit histories выпуск на GitHub.

я использую это, когда я инициализирую РЕПО в текущем каталоге проекта и хочу, чтобы обзор кода был сделан через пользовательский интерфейс GitHub для всего кода в каталоге проекта.