2017-02-17 23 views
0

Как я могу сделать git rebase, что бы что-то эквивалентное "take commit FROM commit c1 to branch tip of branch X, and transplant them onto other branch A2"?Git rebase «сегмент отрасли» (нужно что-то вроде параметра -from?)

Визуально мне нужно сделать перебазироваться, что бы получить меня из этого дерева:

----------------...---*----------*----*---...---X 
    | \---...---A1  master  c1 c2 
    \----...--A2 

... к этому:

----------------...---*master 
    | \---...---A1 
    \----...--A2---*----*---...---X' 
       c1' c2' 

Я первый подумал --fork-point парам было то, что я но результат попытки использовать его для меня был «чистым WTF», думаю, что он делает что-то совершенно другое, поэтому я вернулся к заявлению перед этой неудачной попыткой (что я сделал: git checkout X; git rebase A2 --fork-point master ... возможно, используя хэш х2 вместо мастер был бы прав, но результат вещи выше, было настолько непостижимо для меня, что я полностью отказался от этой дорожки ...)


(P.S. Я не хочу, чтобы мне говорили «почему это плохая идея». Я знаю, что мне нужно, у меня есть четкое представление о том, как коммиты должны перемещаться, и у меня также есть хорошее понимание всех изменений, которые произошли между файлами, поэтому я не ожидаю конфликта, и в случае, если один случается, я уверен, что смогу его решить правильно.)

+1

'--fork-point' сложного маленький Beastie, который использует reflog вверх по течению ветви, чтобы попытаться пропустить фиксации, которые раньше были в восходящем потоке, но были отброшены. Это определенно не то, что вы хотите - то, что вы хотите, - это то, что '--onto' разделяет ответственность' '' 'аргумента' git rebase' в два раза, так что он просто ограничивает, какие коммиты должны быть скопированы, а не установка цели. См. Ответ Гаутама. – torek

ответ

-1

1. git cherry-pick

git checkout A2 
git cherry-pick C1^..X 

2. git rebase --onto

git rebase --onto A2 C1^ X 
tip=`git log -1 --pretty=%h` 
git checkout A2 
git reset $tip --hard 
1

Вы пробовали git rebase --onto?

В частности, если ваша цель состоит в том, чтобы вишневый выбрать фиксации source_branch над target_branch (т.е. совершает Cy & Cz над совершить C6)

  C6 o   => target_branch 
       | 
      C5 o o Cz  => source_branch 
       | | 
      C4 o o Cy 
       | | 
      C3 o o Cx  => some_intermediate_branch 
       | | 
      C2 o--- 
       | 
      C1 o 
  1. мерзавца фотографию target_branch
  2. мерзавца перебазироваться - на HEAD Cx source_branch

Обратите внимание, что фиксация Cx будет не быть выбрано - только совершает Cy & Cz будет выбран и применен над фиксацией C6.

+0

приятный подробный ответ. Я отметил EplieKay как ответ, хотя, потому что он дал 2 способа сделать это плюс и дополнительный полезный совет. в любом случае, спасибо! – NeuronQ