2016-10-30 5 views
2

最後のN個のコミット用のパッチファイルを作成し、別のブランチに別々のコミットとして適用する必要があります。gitの最後のNコミットに複数のパッチを適用して適用する方法

のgitのdiff HEAD〜3 HEAD〜2 >> DIFF1
のgitのdiff HEAD〜2 HEAD〜1つの>> DIFF2
フィットのdiff HEAD〜1つのHEAD:N = 3の場合、私はこれをしなければならないと思います>>その後、

とのdiff3

は、それぞれ別のブランチにそれらを適用します。

GitがDIFF1
(プッシュ)
gitの適用ディを適用しますFF2
(プッシュ)
gitのは、diff3の

を適用し、これを行うための任意の短い方法はありますか?

答えて

5

git format-patchおよびgit amでそれぞれ行うことができます。あなたの例から、試してみてください。

git format-patch HEAD~3 

これは、ファイル0001-commit-foo.patch0002-commit-bar.patch0003-commit-baz.patchを生成します。そして、あなたは別のレポにコピーし、それらを適用するためにgit amを使用することができます:あなたがメッセージ、シャス、およびタイムスタンプを犯すなど、以前のツリーでそれらを作ったとして

git am *.patch 

これは、コミットを保持します。

+0

msysgitの「致命的:読むことができませんでした。読み込みに失敗しました:無効な引数」というエラーメッセージが表示された場合、https://groups.google.com/forum/#!topic/msysgit/1IT785Jf4Zo – Ilya

1

試行git cherry-pickは、別のブランチにコミットします(一時的なパッチを作成する必要はありません)。この質問は、一度に複数のコミットをチェリーピックする方法を示しています。How to cherry-pick multiple commits

+0

私はパッチが必要です。支店は2つのプロジェクトに分かれています。 – Meysam

+1

第2のリポジトリをリモートとして最初のリポジトリに追加すると、異なるリポジトリ間でチェリーピックすることができます。 – TomaszGuzialek

1

ブランチが異なるプロジェクトにあるため、パッチが必要であるというコメントに言及しました。それは問題じゃない。他のプロジェクトのリモコンを追加することができます。共通の履歴を共有していなくても、リモートからチェリーピックすることができます。チェリーピッキングは祖先には関係しませんが、ちょうどあなたがパッチを付けたのと同じように、ちょうど変化を再現することです。


(私は本当に疑うが)チェリー・ピッキングが本当にあなたのためのオプションではありません何らかの理由で、あなたが例えば、バッシュでループを使用することができた場合:

for ((i = 3, d = 1; i > 0; i--, d++)); do ((j = i - 1)); git diff HEAD~$i HEAD~$j > diff$d; done 

あなたが同様のループを書くことができますgit applyコマンドの場合

関連する問題