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

97

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

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

Томаш Пружина
источник
3
Это выглядит очень похоже: stackoverflow.com/questions/1384325/…
Марк,

Ответы:

159

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

--orphan <новая_ ветка>

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

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

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

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

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

Если вы создали свою ветку без истории, то, когда вы отправите ее на сервер, у нее тоже не будет этой истории. FWIW, это помогает мне думать о том, git pushчтобы «удаленная ветка выглядела так же, как моя локальная». Так что, если у вас есть история, и вы продвигаетесь, у нее будет история. Если вы этого не сделаете, то нажатая ветка не будет.

Джон Закмейстер
источник
39

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

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Тогда вы можете запустить свой

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


ср. этот однострочный

Геремия
источник
17

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

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

  1. Я перешел к кнопке терминала в дереве исходных текстов.
  2. Я создал новую «сиротскую» ветку с помощью команды: «git checkout --orphan clean-ver», где clean-ver - имя моей ветки.
  3. Я закрыл терминал и увидел, что мой журнал фиксации был очищен, потому что я находился в новой сиротской ветке. Я разместил весь свой исходный код и зафиксировал изменения.
  4. Я настроил свой репозиторий bitbucket в любом репозитории> добавить удаленный или репозиторий> настройки репозитория> добавить.
  5. Я закрыл это и нажал кнопку
  6. Я выбрал свою новую ветку 'clean-ver' сказал ОК.

Когда я проверил битбакет, мне показалось, что это сработало, и моя история коммитов была отброшена.

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

ThinkBonobo
источник