2016-04-01 8 views
0

私はHTMLファイルのリポジトリをgit rebaseしたいと思っています。私はBにFをリベースしたいのですが、私は、私はC. CがALLでテキストをリフロー変更を導入したくない問題を抱えている変更されたファイルのみをリベースする方法

-- A -- B 
    \ 
    \-- C -- D -- E -- F 

:私はのように見えるレポを持っていますHTMLファイルのこれらのコミットで変更されたファイルのD、E、Fからの変更のみが必要です。

だから、他の言葉で、私が欲しい:EXCEPT

-- A -- B -- D' -- E' -- F' 

は:私が最後にgit diff --name-only C..Fから返されるFからファイルを含めるためにコミットしたい、とBからのファイルの残りの部分

私のために動作しませんものがある:

git rebase --onto B D F 

私は散らかっマージを行うには、手動で私がするファイルを選択する必要があるため。私は-X theirsを追加することができますが、私は望んでいないCからファイルを取得します。

それで、私のやっかいなことは、Bの上に新しいカスタムコミットを作成するだけです.Fのファイルにはgit diff --name-only C..Fがコピーされます。

これを行うには良い方法がありますか?

(参考のために、ここで私は完全にgitを使用せずにそれを行う方法です):

git diff --name-only C..F | xargs -I{} -n1 sh -c "git show F:{} > {}" 
+0

git cherry-pickを使ってみましたか? – Tim

+0

git cherry pickは、同じ問題を抱えています。あなたが選んでいるだけのファイルを選ぶことができない限り、おそらくあなたは知りません。 – Brian

+0

'C'を除いて' D'を 'F'で保持するリベースは、' git rebase -onto D F'ではなく 'git rebase -onto B C F'でなければなりません。あなたが望んでいないファイルが含まれていれば、それはあなたの最初の主張に反して 'F'で' D'にあるものすべてを望んでいないことを意味します。 – torek

答えて

2

まず、git cherry-pick -n C-nは、チェリーピックを行いますが、コミットしないことを意味します。それから、あなたが好きな変更を行い、コミットします。この新しいコミットをC1としましょう。

次に、git rebase --onto C1 C F。範囲はで、であることに注意してください。 Cからは除外されますが、結果はDからFです。これは、git rebase --onto master this thatのようなブランチで作業しているときに意味があります。

関連する問題