2017-02-17 4 views
0

"take commit FROM commit c1 to branch tip of branch X, and transplant them onto other branch A2"と同等のgit rebaseを実行するにはどうしたらいいですか?この1に...Git rebase "branch segment"(--fromパラメータのようなものが必要です)

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

視覚的に、私はこの木から私になるだろうリベースを行う必要があり

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

私が最初--fork-point paramは何私だと思いましたしかし、それを使用しようとした結果、私のために「純粋なWTF」だったと思う。全く違うことをしていると思うので、この試みが失敗する前に状態に戻った。(私がしたのはgit checkout X; git rebase A2 --fork-point master ...おそらくc2のハッシュマスターは正しいことでしたが、事の結果私はこのトラックを完全に放棄したので、私には分かりませんでした...)


(P.S.私は「なぜこれが悪い考えか」と言われたくない。私は必要なものを知っている、私はコミットがどのように動くべきかを明確に把握しており、その間に起こったすべての変更をどのファイルに分かっているのかをよく知っているので、私はそれが正しく解決できると確信しています。)

+1

'--fork-point'であることに使用されるコミットをスキップしようとする上流分岐のREFLOGを使用して、複雑な少しビースティ上流では、しかし、離れてrebasedされました。これはあなたが望むものではありません。あなたが望むのは、 '--onto'が' git rebase'の引数を半分に分割して、どのコミットをコピーするのかを制限するだけですターゲットを設定します。 Gautamの答えを見てください。 – 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以上のコミットをチェリーピック(すなわちサイ&は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. Gitのチェックアウトtarget_branch
  2. Gitのリベースにある場合 - HEAD Cxソースブランチ

コミットCxではなく、が選ばれます - コミットのみのコミットのみCy & Czが選択され、コミットC6の上に適用されます。

+0

すてきな解答。私はEplieKayを答えとしてマークしました。なぜなら、彼は2つの方法でこれを行い、余分な役に立つチップを与えたからです。とりあえずありがとう! – NeuronQ

関連する問題