2013-04-16 5 views
3

У меня есть единственный репозиторий git branch, который имеет ~ 4000 коммитов. Я хочу группировать коммиты в соответствии с датами, которые они были созданы. Например, если ниже фиксаций:Объединение нескольких коммитов в один из Git

abcd 2013-4-1 12:10 
abce 2013-4-1 13:27 
... 
cdef 2013-4-1 18:16 
cdeg 2013-4-2 09:23 
... 
gade 2013-4-2 18:20 
fdeg 2013-4-3 09:42 
... 

Я хотел бы получить историю совершить такие, как все abcd - cdef фиксаций слившихся в один коммит, все ККОРЖМ-Гаде в один и так далее. Я пытался использовать перебазироваться в

git reset --hard cdef 
git rebase -i abcd 

мне не удалось раздавить все коммиты, получил сообщение об ошибке folloving.

"Cannot 'squash' without a previous commit" 

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

Как слить коммиты в соответствии с датами их создания?

ответ

5

Марк первым совершить от каждого дня, как «перефразировать», а остальные, как «FixUp»:

reword xxxxxx First commit from 2013-04-01 
squash xxxxxx another commit from 2013-04-01 
squash xxxxxx another commit from 2013-04-01 
reword xxxxxx First commit from 2013-04-02 
etc 

Это подскажет вам, чтобы написать новое сообщение коммита на каждый день.

Обратите внимание, что совершение сделок на основе времени почти всегда неправильный вещь. Для работы таких инструментов, как git bisect, каждая фиксация в репозитории должна представлять собой изменение размера «укуса».

+0

+1, потому что этот ответ указывает, что группировка, совершаемая по дате, абсолютно неверна. – Christopher

+0

@duskwuff благодарю вас за ответ и предупреждение. коммиты принадлежат к автоматизированной службе, которая резервирует инкрементные данные, с тем чтобы иметь возможность отслеживать изменения в структуре данных. Только сама услуга обновляет и фиксирует данные, одно обновление в любой момент времени. никакие другие отрасли, сотрудничающие стороны не задействованы. проблема заключается в том, что многие коммиты иногда вызывают выполнение «git pull» на других машинах, а «git gc» s в самом хранилище умирают с недостаточными ошибками памяти. делает ли это все еще плохой вариант? – hinoglu

Смежные вопросы