Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Перезаписать одного из предков для коммита слияния

Что есть:
Есть ветка 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

Комментариев нет:

Отправить комментарий