Удалить/скрыть ветки git без удаления данных фиксации

Ситуация:

У меня есть основное репо с основной ветвью dev и большим количеством ветвей "эксперимента", прорастающих от него (например, exp1 и exp2). Цель этих ветвей эксперимента состоит в том, чтобы служить заполнителями для экспериментов, которые генерируют численные результаты. Я записываю имя ветки (и фиксирует идентификатор) ветвей эксперимента, чтобы я мог вернуться к фиксации, чтобы точно увидеть код и историю результатов.

Но теперь существует так много ветвей эксперимента, что становится трудно увидеть основное дерево. Итак, я переосмысливаю свою стратегию хранения заполнителей для кода за каждым набором результатов (т.е. Каждого эксперимента). Очевидно, я мог бы просто сохранить рабочий каталог в каждой ветке, но было бы неплохо сохранить историю фиксации.

Возможное решение:

Один из способов борьбы с этим - переместить ветки эксперимента в свои собственные независимые репозитории, каждый из которых связан с дочерним node соответствующего node в истории фиксации ветки dev. Вот иллюстрация того, что я имею в виду:

enter image description here

Нажмите здесь для большей версии изображения (на imgur.com).

Так, например, для ветки exp1 я хотел бы экспортировать commits A->B->C в отдельное репо, основанное на commit A. Затем я могу просто записать хэш commit P1, чтобы я знал, откуда произошла ветка exp1.

Вопрос:

Как я могу это сделать?

Лучший вопрос:

С другой стороны, я сильно подозреваю, что существует намного лучшая стратегия для выполнения того, что я хочу сделать, а именно: развязать дерево для визуального осмотра, но держать заполнители в предыдущих ветвях, чтобы я мог вернуться к ним, если это необходимо. Итак, может ли кто-нибудь рекомендовать стратегию для этого?

Ответы

Ответ 1

Здесь один из вариантов: используйте ссылки без ветвления, чтобы сохранить подсказки ветвей перед удалением имен ветвей.

Поскольку эти ссылки не являются ветвями, они не будут отображаться в выводе git branch или в материалах, показанных git log --branches и gitk --branches, например. Однако они будут отображаться в списках --all и будут хранить объекты репозитория.

Чтобы создать или обновить ссылку без ветвления, используйте git update-ref. Выберите пространство имен внутри refs/, которое, по вашему мнению, не столкнется с каким-либо будущим использованием (текущие значения refs/heads/ для ветвей, refs/tags/ для тегов, refs/remotes/ для удаленных веток, refs/notes/ для заметок и refs/stash для кошелька).