Публикация частичной истории Git - PullRequest
4 голосов
/ 04 января 2010

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

Ответы [ 3 ]

5 голосов
/ 04 января 2010

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

4 голосов
/ 04 января 2010

Комментарий Бен Джеймса точен. Однако вы можете запустить новую ветку в вашем текущем хранилище. Оттуда, строить историю этой ветви, как вы хотите. Когда вы публикуете, только выдвигайте эту конкретную публичную ветку. Это обеспечит вам ту функциональность, которую вы ищете.

Вот как я только что сделал это в моем тестовом примере:

git branch stackoverflow #Get myself a working branch from current
git rebase -i deadbeef   #0xDEADBEEF is the hex of my first commit

Раздави все, что хочешь спрятать. Обратите внимание, что git получает PISSED, если у вас есть хранилище с несколькими корнями. Это не должно быть возможно, но я только что обнаружил, что с помощью некоторых магических преобразований SVN я создал такого зверя.

Проект также может иметь несколько корней, хотя это не является распространенным (или обязательно хорошей идеей).

Экспорт новой ветки. Оттуда вы можете рассматривать это как основную ветку разработки, а все остальное как актуальную или историческую ветвь, которая не раскрывается.

0 голосов
/ 04 января 2010

Я определенно что-то упускаю, но вы не можете использовать что-то вроде:

git log --since="2009-1-1" -p

Для извлечения только коммитов после определенной даты или:

git log -p 18f822e..HEAD

чтобы получить всю историю после определенного коммита.

...