web-dev-qa-db-ja.com

gitでは、最新の2つ以上のリビジョンに対して単一のパッチを作成するにはどうすればよいですか?

最後の2つのリビジョンのパッチを作成したいと思います。

git format-patch -2

リビジョンごとに1つずつ、2つのパッチファイルを提供します

git format-patch HEAD~2..HEAD

同じことを与えます。

git format-patch -1 HEAD~2..HEAD

単一のファイルを提供しますが、最後のリビジョンの変更のみが含まれます。

Gitでこれを行う方法はありますか?

50
Matthew
git diff HEAD~2..HEAD > my-patch.diff

ただし、フォーマットパッチのコミットごとのメタデータはありません。

52
Tobu

--stdoutオプションを使用してから、ファイルにcatします。

そのようです:

git format-patch HEAD~2..HEAD --stdout > changes.patch

これにより、コミットごとのメタデータが保持されます。

47
JC Brand

Git 2.20(2018年第4四半期)以降では、次のことができます。

  • git format-patch --interdiff
  • git format-patch --rangediff

どちらも、このバージョンと以前のカバーレターの試み(またはツリーダッシュの後のコメント)の違いを説明するのに役立ちます。

format-patch:許可--interdiff/--rangediff単独パッチに適用する

パッチまたはシリーズの改訂版を提出する場合、通常はカバーレターに、interdiffの形式で前回の試行以降の変更の要約を含めると(レビューアにとって)役立ちます。
ただし、ノイズの多い読み取りを行っているにもかかわらず、1パッチシリーズの単独パッチのコメントセクションにinterdiffまたはrangediffを挿入すると便利な場合があります。

commit ee6cbf7commit 3fcc7a2commit 3b02641commit 5ac290fcommit 126facf を参照してください、 commit fa5b7ea (2018年7月22日)by Eric Sunshine(sunshineco .
C浜野潤夫-gitster- in commit 688cb1c 、2018年9月17日)

したがって、「git format-patch --interdiff=<prev> "は、カバーレターを要求するのではなく、1つのパッチのコメントセクションにinterdiffを挿入します。
interdiffは、混乱を避けるためにインデントされていますgit-amおよび人間の読者は、パッチの一部を適切と見なします。

commit 40ce416commit 8631bf1commit 4ee9968commit 2e6fd71commit 31e2617 を参照してください、 commit 73a834ecommit 2566865commit 87f1b2d (2018年7月22日)by Eric Sunshine(sunshineco
C浜野順夫-gitster- in commit 881c019 、2018年9月17日)

したがって、「git format-patch --range-diff=<refspec> "を挿入してrange-diffは、カバーレターを要求するのではなく、単独のパッチの解説セクションに挿入します。

2
VonC

次のようなことができます:

 $ git checkout -b tmp 
 $ git reset HEAD〜2 
 $ git commit -a 

ブランチtmpへのコミットは、2つの個々のコミットと同じになります。

0
William Pursell