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. Чтоделоц?

git, ?
1. der_FeniX 13.04.2012 11:59

надо было отдельную ветку создать из branch1 A, сделать там rebase и потом уже обычным fast-forward накатить в branch2

2. gelraender_FeniX /1 13.04.2012 12:02

Поподробнее, пожалуйста. Сделать новый бранч branch3 в котором будет только А. Что куда дальше rebase'ить?

3. der_FeniXgelraen /2 13.04.2012 12:08 917f8979

дальше делаешь rebase из brach1, пропуская ненужные тебе коммиты (B1), решаешь конфликты. в итоге в branch3 должно получиться A→C1 и дальше мержишь branch3 в branch2. fast-forward тут, наверное, всё-таки не получится, но мердж пройдёт без проблем. правда могут возникнуть конфликты потом, когда будешь сливать branch1 и branch2

4. gelraender_FeniX /3 13.04.2012 12:25 imax

Если я правильно понял:
git checkout branch1
git branch temp
git checkout temp
git rebase -i A # удалить все коммиты кроме С1
git checkout branch2
git merge temp

Не получается, после rebase оно уже считает это другим коммитом.

5. gelraen 13.04.2012 12:28

наверное, я таки хочу странного. Поскольку при этом у C1 меняется parent, то это в любом случае будет другой коммит.

6. der_FeniXgelraen /5 13.04.2012 12:32 917f8979

любые операции с коммитами меняют сами коммиты, это неизбежно. влить C1, пропустив B1 и сохранив id коммита — невозможно. поэтому, кстати, никогда не стоит делать rebase публичных веток, которые уже клонировали другие люди.

7. ulidtkogelraen /5 13.04.2012 17:53 уважением

да.

Do you really want to delete ?