Если вы имеете в виду, что вы хотите только 6 месяцев истории, то вы можете рассмотреть возможность использования мелкого клона.См. --shallow-since
параметр git clone
(https://git -scm.com / docs / git-clone ).
Это сохраняет идентичность ваших коммитов, поэтому вряд ливызывать сбои даже при использовании с общим репозиторием происхождения.Это также дает вам возможность хранить более глубокую историю либо по происхождению, либо в архивном хранилище.Опять же, поскольку идентичность фиксации сохраняется, вы можете легко перенести любую новую работу, выполненную на мелком репо, с глубокой историей, если возникнет необходимость в будущем устранении неполадок или в любом другом случае.
Другой альтернативой является выполнениепереписывание истории, которая создает новый коммит вместо серии старых коммитов.Если репозиторий является общим, это «сломает» репозиторий всех остальных.Вам нужно будет координировать действия с ними, чтобы убедиться, что они правильно «исправят» свои репозитории, иначе они могут отменить ваше переписывание.См. «Восстановление из исходной ребазы» в документации git rebase (https://git -scm.com / docs / git-rebase ), так как это применимо к любой ситуации, независимо от того, как вы выполняете переписывание.
Процедура, предложенная ElpieKay, будет работать до тех пор, пока ваша история будет строго линейной, но она может занять много времени.Если имеется несколько ветвей или если часть истории, которую вы сохраняете, включает в себя слияния, это становится на намного менее простым.
Более общеприменимым решением является использование git filter-branch
с--parent-filter
.Учитывая историю типа
... x -- O -- O -- O -- y ...
и желая уменьшить ее до
... xTHRUy ...
(где xTHRUy
- один коммит), вы можете сделать что-то вроде этого:
export NEW_PARENTS=$(git show --format='%P' --no-patch) x
export OLD_PARENTS=$(git show --format='%P' --no-patch) y
где x
и y
- выражения, которые разрешают соответствующие коммиты.Это может быть идентификатор фиксации или что-то вроде master~137
, если вы знаете «путь» к правильной фиксации.Тогда
git filter-branch --parent-filter "sed \"s/$OLD_PARENTS/$NEW_PARENTS/\"" -- --all