Как я могу сделать ребаз и сохранить слияния, а также сделать сквош / исправление - PullRequest
3 голосов
/ 17 июня 2019

Когда мне поручено очистить ветку длинных функций, я обнаружил, что в истории есть много коммитов, которые нужно раздавить / исправить или перефразировать. Я хочу сохранить слияния, поскольку они могут иметь сложные способы разрешения конфликтов, которые я не могу сделать.

Представьте себе следующие коммиты:

master: P0 - P1 - P2 - P3 --------------
         \    \                          \
feature:  A - M1 - B - C1 - C2 - C3 - D - M2 - E

Где M s - это слияния из одной ветви (master) 2.

И я хочу исправить C2 и C3 в C1 (и сказать reword C1).

Когда я делаю: git rebase -i -r master Я вижу все коммиты и слияние, и помечаю их f и r по желанию.

Когда эта перебазировка будет выполнена, и я достигну коммита слияния M2, git будет жаловаться на конфликт. Я предполагаю, потому что это не может применить объединение, так как коммиты были переписаны как следствие исправлений.

Есть ли способ заставить git выполнять такое слияние без конфликтов? Учитывая, что я не изменил какие-либо строки содержимого, ours или theirs всегда будут правильными в этом случае, и как бы я это сделал в середине выполнения этой ребазировки.

1 Ответ

0 голосов
/ 17 июня 2019

Если в общих чертах, то, что вы хотите сделать, это сжать все ваши изменения в один и перебазировать поверх ветки, с которой вы начали .... Я делаю это без всяких проблем с перебазированием, как это:

git checkout my-branch
git merge the-target-branch
# finish that merge, doesn't matter the comment, it will go away
# when the merge is finished
git reset --soft the-target-branch
git commit -m "my squashed feature"

И вы перебазировали / раздавили, даже не заметив

...