Как я могу полностью очистить главную ветку в 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 для всего кода в каталоге проекта.