Этот вопрос очень важен для git rebase interactive: squash merge commits together.Плавление вместе слияния коммитов
Предположим, вы пишете новую функцию для определенного проекта. Вы начинаете с определенного филиала, скажем 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
, которая позже появится в сообщении фиксации слияния. Кроме того, попробуйте сделать это, когда вы работаете над более чем двумя ветвями!
Есть ли более элегантный способ сделать это? Кажется, операция, которая стоит удобной команды, поэтому я предполагаю, что есть несколько ярлыков.
Спасибо за вашу помощь
Я пропустил синтаксис 'devel^0'. Разве это не должно быть просто «девелом»? – Dacav
Если вы используете 'devel', вы попадете на эту ветку, если вы используете' devel^0', вы не будете, вместо этого вы будете на отдельной головке. Если вы находитесь на 'devel', тогда вы будете сливаться с этой ветвью, но если вы находитесь в отдельно стоящей HEAD, вы будете сливаться без ветки. – FelipeC