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