Как продвинуть новую ветку без истории

У меня есть git repo с двумя несвязанными ветвями, master и configs. Я создал конфиги, очистил все файлы, а затем поместил их только в файлы конфигурации. Теперь я хочу нажать это на удаленном репо, но это как новая, пустая ветвь (без журналов всех моих изменений и старых ревизий исходной ветки).

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

Ответ 1

Очистка всех файлов не избавляет от истории. Вам нужно создать ветвь, у которой нет истории вначале, и добавить ваши файлы конфигурации. В наши дни git checkout есть опция --orphan, которая делает ветвь без истории. Здесь информация о опции --orphan:

- сирота < new_branch >

Создайте новую сиротскую ветвь с именем < new_branch > , начиная с < start_point > и переключитесь на нее. Первая фиксация, сделанная в этой новой ветке, не будет иметь родителей, и она станет корнем новой истории, полностью отключенной от всех других ветвей и совершит.

Индекс и рабочее дерево настроены так, как если бы вы ранее запускали "git checkout < start_point > ". Это позволяет вам начать новую историю, которая записывает набор путей, похожих на < start_point > , легко запуская "git commit -a", чтобы сделать корневую фиксацию.

Это может быть полезно, если вы хотите опубликовать дерево из коммита без раскрытия его полной истории. Возможно, вы захотите сделать это, чтобы опубликовать ветку с открытым исходным кодом проекта, текущее дерево которого является "чистым", но полная история которого содержит проприетарные или иным образом обремененные биты кода.

Если вы хотите запустить отключенную историю, которая записывает набор путей, полностью отличающихся от одного из < start_point > , тогда вы должны очистить индекс и рабочее дерево сразу после создания ветки-сироты, запустив "git rm -rf." от верхнего уровня рабочего дерева. После этого вы будете готовы подготовить свои новые файлы, заполнив рабочее дерево, скопировав их из других источников, извлеките архив и т.д.

Здесь ссылка на документацию для checkout. Вы также можете запустить git help checkout.

Как только вы создали свою ветку без истории, тогда, когда вы нажмете ее на сервер, она также не будет иметь эту историю. FWIW, это помогает мне думать о git push как "сделать удаленный филиал похожим на мой локальный". Поэтому, если у вас есть история и нажмите, у нее будет история. Если вы этого не сделаете, то нажатая ветка не будет.

Ответ 2

Мне нужно было сделать это, чтобы отправить freelancer некоторый код, не разделяя личную информацию или не удаляя мою историю.

Если кто-то из вас использует SourceTree, мне это удалось. Пожалуйста, дайте мне знать, если я сделал что-то неправильно или что-то забыл, поскольку я очень незнакомо с управлением контролем версий.

  • Я пошел к кнопке терминала в дереве исходных текстов.
  • Я создал новую ветку "сирота", используя команду: 'git checkout --orphan clean-ver', где clean-ver - имя моей ветки
  • Я закрыл терминал и увидел, что мой журнал фиксации был очищен, потому что я был в новой сиротской ветке. Я поставил весь исходный код и зафиксировал изменения.
  • Я установил свой репозиторий bitbucket в репозитории > добавить удаленный или репозиторий > настройки репозитория > добавить.
  • Я закрыл это и нажал кнопку
  • Я выбрал свой новый ветвь "clean-ver", сказал ok.

Когда я проверил bitbucket, кажется, что это, похоже, сработало и отменило мою историю фиксации.

Надеюсь, это поможет кому-то.

Ответ 3

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

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Затем вы можете запустить

git push <remote-name> <branch-name>


ср. этот однострочный файл