2015-03-29 2 views
-1

У меня есть репозиторий Git, который восходит к 2007 году. Он начинался как репозиторий CVS, который был преобразован в SVN, а затем Git.Очистка git переписала истории, которые слились обратно вместе?

Несколько месяцев назад я сделал примерно filter-branch -ing, чтобы уменьшить размер репозитория и добавить некоторые несвязанные проекты в свои собственные репозитории.

В результате история в оставшемся «основном» репозитории теперь беспорядочна, и у меня много коммитов, которые выглядят одинаково (одно и то же сообщение и временная метка), но разные SHA1 на параллельных дорожках дерева.

Есть ли способ переписать это как полную линейную историю? Я хотел бы зациклиться на истории и в основном просто взять последнюю фиксацию в любой день и сохранить только эту фиксацию на этот день, но объединить все уникальные сообщения фиксации с этого дня.

Это даст мне линейную хронологическую историю. Я понимаю, что любые эксперименты, выполненные в ветвях развития, будут выглядеть немного странно (как если бы я сделал изменение на хозяине, а затем позже поддержал его). Хорошо.

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

+0

«Git действительно должен содержать какую-то мета-историю, которая отслеживает происхождение переписанных и переустановленных записей, обратно к оригинальным коммитам». http://idioms.thefreedictionary.com/A+bad+workman+blames+his+tools Похоже, что у вас совсем беспорядок, и это не ошибка Гита. ИМО лучше всего будет делать массовое ручное переписывание локально, а затем принудительно нажать на GitHub. (Это имеет существенные последствия, о которых вы должны знать, но вряд ли это ухудшит вашу ситуацию. Проблемы, вызванные переписыванием и принудительным нажатием, - это те, которые вы пытаетесь исправить сейчас.) – Chris

+3

Альтернатива множеству ручная фиксация - это просто прекратить заботу об этом. История - это история. Просто продолжайте с чистого листа. – poke

ответ

0

В конце концов, это было простое исправление.

Я искал два явно дублированных фиксации (выпуск релиза, выпущенный несколькими месяцами назад, который предварял всю сумасшедшую ветку фильтра) и использовал git replace для совместного использования двух дубликатов.

Итак, старая история и новейшая история являются линейными, есть только локализованная выпуклость сумасшествия между мной, я просто оставлю в покое.