2010-11-17 2 views
1

У меня есть репозиторий Git со следующей структурой:Как отделить фиксацию в ветку после выполнения нескольких других коммитов?

A--B--C--D--E 

я хотел бы разделить C совершить в отрасли:

 C 
    /\ 
A--B---D--E 

Как я могу это сделать?

+0

Линия 'B --- D', вероятно, посторонняя - вы не переписываете какие-либо коммиты, просто переименование вещей. –

+0

Если новая ветка должна быть долговечной и синхронизирована с текущей, может быть желательной линия B-D. Зависит от того, чего вы хотите. –

+0

@adymitruk Нет, я имею в виду, что D не имеет B как родителя, поэтому два графика имеют разные истории. –

ответ

2
git branch new-branch C 

создаст новую ветвь, указывающую на C имени new-branch, в конечном итоге с этим:

new-branch  HEAD 
      |   | 
A -> B -> C -> D -> E 
+1

Ах да, красота указателей. Благодаря! – zoul

+0

не выводит желаемый график в вопросе. –

2

Правильный ответ чтить тот факт, что D имеет 2 родителей на выходе, что вы хотите. Я собираюсь предположить, что на E указывает мастер.

git branch new-branch C 
git checkout -b merge-base B 
git merge --no-ff new-branch 
git rebase --onto merge-base D^ master 
git checkout master 

вы будете в конечном итоге с этим:

 C 
    /\ 
A--B---Y--D'--E' 

это сохранит C в качестве родителя в слиянии в основную ветвь. Вы можете раздавить D в Y с git rebase -i head ^^^. Тогда у вас будет:

 C 
    /\ 
A--B---D''--E'' 
Смежные вопросы