Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Это фактически называется "удалять старые ветки мастера и создавать новые с нуля"

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Вот что-то, что, вероятно, плохое, но работает в пробке (на вершине решения арагара)

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 по всему коду в каталоге проекта.

Ответ 4

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

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

Ответ 5

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

Удалить u удалить содержимое главной ветки или самой ветки?

Ответ 6

Другие ответы предлагают создать новую ветку master (как это было бы в пустом хранилище). Но иметь мастера без истории не очень хорошая практика. Это затрудняет использование перебазирования, поскольку вы никогда не сможете перебазировать первый коммит. Первый коммит master в любом репозитории должен быть пустым. Для этого есть низкоуровневое решение:

Исправить с помощью низкоуровневых сантехнических команд

Сначала вы получаете пустой хеш дерева:

$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904

Затем вы используете хэш дерева, чтобы создать пустой коммит

$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

И, наконец, вы сбрасываете мастер на этот коммит

$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

Это далее описано в моем блоге.