gelraen
13.04.2012 10:34 imax
А как кошерно мержить только некоторые коммиты из одного бранча в другой? Например есть branch1: A→B1→C1→D1 и есть branch2: A→B2→C2. Мне надо смержить C1 в branch2. Сделал через git cherry-pick, но теперь оно считает его независимым коммитом и показывает его и в git log branch1..branch2, и в git log branch2..branch1. Чтоделоц?
надо было отдельную ветку создать из branch1 A, сделать там rebase и потом уже обычным fast-forward накатить в branch2
Поподробнее, пожалуйста. Сделать новый бранч branch3 в котором будет только А. Что куда дальше rebase'ить?
дальше делаешь rebase из brach1, пропуская ненужные тебе коммиты (B1), решаешь конфликты. в итоге в branch3 должно получиться A→C1 и дальше мержишь branch3 в branch2. fast-forward тут, наверное, всё-таки не получится, но мердж пройдёт без проблем. правда могут возникнуть конфликты потом, когда будешь сливать branch1 и branch2
Если я правильно понял:
git checkout branch1
git branch temp
git checkout temp
git rebase -i A # удалить все коммиты кроме С1
git checkout branch2
git merge temp
Не получается, после rebase оно уже считает это другим коммитом.
наверное, я таки хочу странного. Поскольку при этом у C1 меняется parent, то это в любом случае будет другой коммит.
любые операции с коммитами меняют сами коммиты, это неизбежно. влить C1, пропустив B1 и сохранив id коммита — невозможно. поэтому, кстати, никогда не стоит делать rebase публичных веток, которые уже клонировали другие люди.
да.