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

Ситуация:

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

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

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

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

Нажмите здесь, чтобы увеличить версию изображения (на imgur.com).

Так, например, для отрасли exp1Я хотел бы экспортировать коммиты A->B->C в отдельном репо, основанном на коммите A, Затем я могу просто записать хэш коммита 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 для заначки).

Другие вопросы по тегам