Что есть:
Есть ветка C в которую вмержены ветки А и В.
* 113cfa6 (HEAD -> master) 12
* 74f6351 10
| * f63d30b (C) Merge branch 'B' into C
| |\
| | * afe44c6 (B) 8
| | * 1da5826 7
| * | 3b5fa89 11
| * | 93d7b1d Merge branch 'A' into C
| |\ \
|/ / /
| * | 9023742 (A) 3
| * | 8e7ac5c 2
* | | eb15793 (X) 9
| |/
|/|
* | 01ea56d 6
* | 11585f1 5
* | c8905ca 4
|/
* dc6c154 1
Что нужно:
Нужно перемотать ветку С на последний комит мастера
* 6099fa1 (C) Merge branch 'B' into C
|\
| * afe44c6 (B) 8
| * 1da5826 7
* | b8a7ffd 11
* | 7f48be6 Merge branch 'A' into C
|\ \
| * | 9023742 (A) 3
| * | 8e7ac5c 2
* | | 113cfa6 (HEAD -> master) 12
* | | 74f6351 10
* | | eb15793 (X) 9
| |/
|/|
* | 01ea56d 6
* | 11585f1 5
* | c8905ca 4
|/
* dc6c154 1
Что пробовал:
git rebase master C Но это убивает все мердж комиты и ребейзит все комиты веток А и В на мастер
История:
Объясню откуда появились такие странные требования. master используется для получения актуальных данных из remoute, все поставки в него через pullrequest. Каждая отдельная ветка (А,В) это решения для определенного issue. В конце какого то периода создается ветка pr(С) в которую вмердживают несколько бранчей(А,В), создают pullrequest и запускают тесты. Тесты как всегда падают, и фиксы по возможности поставляют в те бранчи(А,В) которые вмерджены в pr(С). Но иногда возникают конфликты или фиксы невозможно добавить в бранчи(А,В), так появляются отдельные комиты (11) в ветке pr(С). Пока проходят фиксы ветка master уже убегает вперед и нужно подмержить изменения в ветку pr(C). Мерджи из мастера происходят так часто что в ветке pr(C) половина коммитов это подливка мастера, потом pullrequest принимается и мастер превращается в паутину "подливок из мастера". Появилась идея избежать ненужных мерджей с мастером, и было принято решение перематывать ветку pr(С) от последнего комита master вместо мерджа с ним.
Ответ
Вам нужна опция -p (--preserve-merges), она заставляет rebase не развёртывать мёржи, а сохранять их. На заметку: не рекомендуется эту опцию использовать вместе с -i (--interactive), а если уж использовать, то не переупорядочивать коммиты, иначе результат может быть неожиданным.
git rebase -p master C
Комментариев нет:
Отправить комментарий