Как объединить git коммиты из ветки Develop в ветку Feature
В моем репозитории git есть ветка разработки и ветка функций. Я добавил коммит для разработки, и теперь я хочу, чтобы этот коммит был объединен с моей веткой функций. Если я сделаю это
git checkout feature
git merge develop
Я заканчиваю коммитом слияния. Так как я буду слить новые коммиты при разработке в свою функциональную ветку, я бы хотел избежать всех этих ненужных коммитов слияния. Я видел этот ответ, который предложил сделать git rebase develop
но это заканчивает тем, что перематывал мою ветку слишком далеко, и перебазирование не удается.
Обновление: то, что я закончил, было
git checkout feature
git merge develop # this creates a merge commit that I don't want
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want
git push
Обновление: я только что заметил, что исходный коммит при разработке получает другой хеш при слиянии, а затем перебазируется в ветку возможностей. Я не думаю, что это то, чего я хочу, потому что в конце концов я объединю функцию с разработкой, и я предполагаю, что это не будет играть хорошо.
2 ответа
Чтобы интегрировать одну ветку в другую, вы должны либо объединить, либо перебазировать. Поскольку перебазировать коммиты, на которые нет ссылок где-либо еще, безопасно (не объединено с другими локальными ветвями; не передано на какой-либо удаленный узел), лучше объединить.
Если ваша функциональная ветвь является чисто локальной, вы можете переназначить ее поверх разработки. Однако требуется время, чтобы понять, как работает rebase, и, прежде чем вы это сделаете, довольно легко случайно создать дублированные или отброшенные коммиты. Коммиты слияния могут выглядеть шумно, но слияние гарантированно всегда будет безопасным и предсказуемым.
Для лучшего просмотра попробуйте записать все вместе на графике:
git log --all --graph --oneline --decorate
Также стоит подумать, действительно ли вам нужны коммиты на develop
слились в feature
, Часто это вещи, которые можно оставить отдельно feature
слит в develop
потом.
Если вы регулярно находите, что вам нужно develop
код на feature
тогда это может быть признаком того, что ваши ветви функций слишком продолжительны. В идеале функции должны быть разделены таким образом, чтобы с ними можно было работать независимо, без необходимости регулярной интеграции.
Если вы хотите только один коммит из develop
филиал вы можете выбрать его в своем feature
ветка:
git checkout feature
git cherry-pick -x <commit-SHA1>
Фиксация будет применена как новая поверх вашей ветви (при условии, что она не вызовет конфликт), и когда вы объедините обратно feature
Филиал Git справится с этим без конфликтов.