#git #git_rebase #git_cherry_pick
Дано: существуют две ветки, ветка prod в которой то что лежит на боевом сервере и ветка develop из которой выкатывается на тестовый. Они разумеется во многом похожи но содержат множество принципиально разных фичей. В один прекрасный день возникает необходимость запилить тяжелую фичу прямо от прода. Фича запиливается. Остается вопрос - как перетащить ее в ветку девелоп, чтобы при этом не было нужно мержить всех предков этой фичи. Смотри картинку: Случай А: Я хочу перетащить коммиты E и F не перетаскивая коммиты A и B. Как? Случай B: этот и дальше на практике мне пока не нужны (и рисовать было лень) но любопытно: пусть F - это некоторое множество последовательных коммитов не оформленных в отдельную ветку (т.е. не существует ветки содержащей в себе коммиты F и только их) Я хочу перетащить коммиты F, но не хочу коммит(ы) E. Как? Случай C:, хочу перетащить всю ветку фичи кроме одного-трех коммитов, которые находятся где-нибудь в середине ветки и не являются последовательными Случай D:, Это случай А плюс добавим что ветку от прода надо сохранить. E: возможно ли при этом задать какое-нибудь автоматическое разрешение конфликтов в сторону (девелопа)/(ветки с фичей) если они будут Пока я нашел cherry-pick но перетаскивать ветку по одному коммиту - то еще извращение и наверняка есть человеческий способ. Правильно ли я понимаю что мне нужно копать куда-то в сторону rebase?
Ответы
Ответ 1
@Volt, git cherry-pick позволяет переносить несколько коммитов сразу. Для этого нужно задать, например, диапазон коммитов: git cherry-pick F..E. Подробнее о задании диапазонов коммитов читейте здесь: http://git-scm.com/docs/gitrevisions.htmlОтвет 2
Слегка поразбирался сам: Кроме массового черри-пика часть задач можно решить с помощью git rebase -i --onto develop prod feature Флаг -i позволяет решать какие коммиты оставить, какие перетаскивать из этого множества, кому изменить сообщения. Гит откроет свой редактор (по умолчанию vim) и предложит назначить каждому коммиту из ветки feature соответствующий флаг (оставить, убрать, слить с предыдущим) и изменить сообщения если нужно. Как я понимаю этот механизм применяется также для приведения истории коммитов в порядок. Способа автоматически разрешать конфликты пока не нашел.Ответ 3
Если вы работаете в IntelliJ IDEA, то в консоли на закладке Version Control можно просматривать логи. На вкладке логов можно для одного из коммитов выполнить Cherry-Pick. Cherry-Pick – это способ забрать в текущую выбранную ветку отдельный коммит из другой ветки, не затрагивая остальных коммитов. После чего можно сделать Commit and Push в удалённый репозиторий.
Комментариев нет:
Отправить комментарий