Удалить/скрыть ветки 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
для кошелька).