2014-10-26 1 views
3

У меня есть филиал, как это:Как сквот все сливается в ветку?

A---B---B1---B2---D---E---E1---E2---G---H 
    \   / \   /
     C1---C2---’  F1---F2---’ 

Я хочу, чтобы переписать его и сделать это так:

A---B---B1---B2---D---E---E1---E2---G---H 

Это означает, давя все сливается.

Ветвь очень длинная. Как это можно сделать автоматически?

Редактировать

Это не история линеаризация. Я хочу раздавить все слияния, такие как D и G.

+0

Хотя это своего рода хромой и невероятно hacky, вы можете * направить эту историю в репозиторий svn, который делает именно это. После этого вы можете удалить информацию svn. –

+0

Это не просто хакерство, оно также требует наличия сервера SVN. –

+0

Jeah, это нехорошее решение, я просто хотел упомянуть об этом ради полноты. –

ответ

2

Это должно сделать трюк. Поскольку мы выбрали вишню, сообщение фиксации, автор и дата автора будут такими же, как и оригинальные коммиты, включая слияния.

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

git commit --amend -C $(git rev-parse $rev^2) 

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

заказ базовой фиксации (в отдельных состоянии):

git checkout A~0 

Вишневый выбрать все коммиты:

for rev in $(git rev-list HEAD..branch-name --first-parent --reverse) 
do 
    if [[ $(git show --summary --format="%P" $rev | wc -w) -gt 1 ]] 
    then 
     git cherry-pick $rev --mainline 1 
     # git commit --amend -C $(git rev-parse $rev^2) 
    else 
     git cherry-pick $rev 
    fi 
done 

Force старый филиал и проверку:

git branch -f branch-name HEAD 
git checkout branch-name 
+0

Можете ли вы пояснить, что означает «удаление добавления изменения первого условия»? Где я могу поместить это 'git commit -amend' и когда я захочу его использовать? – robru

+0

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

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