Удалить ветку функции слияния в истории git - PullRequest
2 голосов
/ 18 марта 2019

В настоящее время я конвертирую SVN-репозиторий в Git, и в ходе этого процесса я хочу сделать историю как можно более линейной.Проблема в том, что у меня есть некоторые ветки функций в SVN, которые объединяются с основной веткой во время процесса.Этот шаблон слияния делает перебазирование болезненным, и я не могу понять, как это сделать правильно.

Моя цель состоит в том, чтобы заменить слияние ветви объекта коммитами из сквоша: enter image description here

Я изучил ответ на этот вопрос, но ни один из предложенных ответов, по-видимому, не подходит для моего случая: git remove merge commit из истории

Как мне пойти на раздавливаниемоя ветвь функций, чтобы я мог перебазировать ее на master в нужный момент времени?

1 Ответ

2 голосов
/ 18 марта 2019

Допустим, M - это самый верхний коммит слияния (тот, что между G и H):

git checkout -b cleaned-branch M
git reset --soft G
git commit -m "Get rid of merge"
git rebase M `git rev-parse master` --onto cleaned-branch
git checkout -B cleaned-branch

git reset --soft G заставит git думать, что G - это ваш текущий базовый коммит, но он делает это, не касаясь ваших файлов (в отличие от checkout), поэтому вы останетесь со всеми изменениями после слияния в форма ожидающих изменений, и последующая фиксация будет просто иметь G в качестве родителя. Затем мы перебазируем оставшиеся коммиты и переместимся на cleaned-branch до итогового коммита.

...