Этот вопрос очень связан с git rebaseinteractive: слияние сквоша выполняется вместе .
Предположим, вы пишете новую функцию для определенного проекта. Вы начинаете с определенной ветки, скажем, devel
, и создаете ветку для своей функции, feature/X
. Время от времени вы также находите некоторые проблемы в проекте, поэтому вы решаете построить вторую ветку, называемую fixes
, начиная с devel
.
Поскольку вам нужно применять исправления по ходу feature/X
, вы продолжаете делать git merge fixes
время от времени, так что в итоге вы окажетесь в следующей ситуации:
a --- b --- M --- c --- M --- d ---- e --- M (feature)
/ / / /
/ / / /
devel ----- fix1 ------ fix2 ------------- fix3 (fixes)
Поскольку это никогда не нажималось (поэтому я не нарушаю чью-либо историю), я хотел бы объединить все слияния в одно, получив следующее:
a ---------------------- M --- b --- c --- d --- e (feature)
/ /
/ /
devel -- fix1 -- fix2 -- fix3 (fixes)
Способ получения этого результата будет
git co -b feature2 devel
git merge --no-ff fixes
git rebase featur2 feature
Это на самом деле делает работу, но заставляет меня создать дополнительную ветку feature2
, которая позже появится в сообщении коммита слияния. Кроме того, попробуйте сделать это, когда вы работаете более чем с двумя ветками!
Есть ли более элегантный способ сделать это? Кажется, операция стоит удобной команды, поэтому я предполагаю, что есть какой-то ярлык.
Спасибо за вашу помощь