2015-05-22 3 views
1

Предполагаю, что у меня есть ветки o1o2o3 .Объединить несколько ветвей в одну

Все они имеют несколько фиксаций, были сделаны все коммиты в o1 перед тем o2, которые были сделаны до того o3, и т.д ...

Я хочу создать филиал d1, который содержит все коммиты o1, o2, o3 и неиспользованный. То есть тот же идентификатор хеширования. Вы можете предположить, что они не конфликтуют друг с другом.

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

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

+0

Знаете ли вы, что в Git ветка является «указателем» на фиксацию? Основываясь на вашем описании (* Они все имеют несколько коммитов, где все совершаются в o1, были сделаны до o2, которые были сделаны до o3 и т. Д. *), Вы могли бы просто объединить три старых ветви в самую последнюю, используя ускоренную перемотку вперед сливается. – Jubobs

+0

Я не уверен, но я думаю, что вы делаете «...' d1' со всеми коммитами из 'o1' ... intact, т. Е. Тот же хэш ...» не имеет смысла. В Git хеш фиксации включает историю, если вы создаете ветку с другим контентом/историей, хеш изменится. –

+0

Какая ветка удаляется 'git merge'? Что вы пробовали, точно? Что-то вроде 'git checkout -b d1', затем' git merge o1 o2 o3 o4'? – coredump

ответ

1

Единственный путь вы можете создать d1 без изменения хэши, если у вас уже есть история, которая выглядит примерно так:

* -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * 
    o1    o2    o3    o4 

То есть, если все, что вы можете добраться от o1 также доступен из o2, и т. д. В противном случае создание вашей ветки d1 будет включать в себя создание по крайней мере одного нового коммита из старого, с новым, имеющим другой родительский элемент. Родитель фиксации вносит свой вклад в его хэш, поэтому то, что вы хотите, невозможно.

+0

ОК. Благодарю. Кажется, что то, что я хочу, невозможно, потому что варианты использования git не включают этот прецедент из-за того, как вычисляется хеш. Спасибо за объяснение. – brunoais

+0

Примечание «Все они имеют несколько коммитов, где все совершаются в o1, были сделаны до o2, которые были сделаны до o3 и т. Д.», Не означает, что история является линейной. – Jubobs

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