Як просунути нову гілку без історії


95

У мене є git repo з двома не пов'язаними гілками, master і config. Я створив конфігурації, очистив усі файли, а потім розмістив їх лише у конфігураційних файлах. Тепер я хочу натиснути це на віддалене репо, але як би це було нове, порожнє відділення (без журналів усіх моїх змін та старих версій вихідного гілки).

Як я можу очистити всю історію і натиснути її?


3
Це виглядає дуже схоже: stackoverflow.com/questions/1384325/…
Марк

Відповіді:


157

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

--orphan <new_branch>

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

Індекс і робоче дерево налаштовуються так, ніби ви раніше запускали "git checkout <start_point>". Це дозволяє запустити нову історію, яка записує набір шляхів, подібних до <start_point>, легко запускаючи "git commit -a", щоб зробити кореневий коміт.

Це може бути корисно, коли ви хочете опублікувати дерево з коміту без викриття його повної історії. Можливо, ви захочете зробити це, щоб опублікувати гілку з відкритим кодом проекту, чиє поточне дерево "чисте", але повна історія якої містить власні або обтяжені бітом коди.

Якщо ви хочете запустити відключену історію, яка записує набір шляхів, який повністю відрізняється від <start_point>, тоді вам слід очистити індекс та робоче дерево відразу після створення гілки-сироти, запустивши "git rm -rf. " від верхнього рівня робочого дерева. Згодом ви будете готові підготувати нові файли, повторно заповнивши робоче дерево, скопіювавши їх з іншого місця, витягнувши tarball тощо.

Ось посилання на документацію для замовлення . Ви також можете бігати git help checkout.

Після того, як ви створили свою гілку без історії, тоді, коли ви перенесете її на сервер, вона також не матиме цієї історії. FWIW, це допомагає мені думати про git push"зробити віддалену гілку схожою на мою локальну". Отже, якщо у вас є історія, і натискайте, вона буде мати історію. Якщо ви цього не зробите, то відсунута гілка не буде.


37

Як я можу очистити всю історію і натиснути її?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Тоді ви можете запустити свій

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


пор. цей однокласник


16

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

Якщо хтось із вас використовує SourceTree, це мені вдалося зробити. Будь ласка, дайте мені знати, якщо я щось зробив неправильно чи щось забуваю, оскільки я дуже не знайомий з управлінням джерелами.

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

Коли я перевірив bitbucket, здається, що це спрацювало і відкинуло мою історію комітів.

Сподіваюся, це допомагає комусь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.