特定のコミットの git パッチを生成する

SHA1コミット番号のリストに対してパッチを作成するスクリプトを書く必要があります。

git format-patch ` を使ってみましたが、そのSHA1以降のコミットごとにパッチが生成されてしまいました。数百のパッチが生成された後、プロセスを終了させなければなりませんでした。

特定のSHA1に対してのみパッチを生成する方法はありますか?

試すんだ:

git format-patch -1  最上位のコミットからパッチを準備する。

コマンドでパッチを適用します:

git am < file.patch
解説 (12)

特定のsha1ハッシュから最上位のコミットからパッチを生成する:

git format-patch - 

headからの最後の10個のパッチを1つのパッチファイルにまとめる:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
解説 (4)

例えば、コミット1の後にコミットIDが2であったとする:

git diff 2 1 > mypatch.diff

ここで2と1はSHAハッシュです。

解説 (6)

このコマンド(@ Naftuli Tzvi Kay ですでに示唆されているとおり):

git format-patch -1 HEAD

HEADを特定のハッシュまたは範囲に置き換えます。< / sup>。

UNIXメールボックス形式に似た最新のコミット形式のパッチファイルを生成します。

-< n>-最上部のパッチを準備< n>コミット。

次に、メールボックス形式でパッチファイルを再度適用できます。

git am -3k 001*.patch

参照:man git-format-patch

解説 (3)
git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

高速でシンプルなソリューション。

解説 (1)

(シングルコミット)パッチが特定のコミットの上に確実に適用されるようにしたい場合は、新しいgit 2.9(2016年6月)オプション git format-patch --baseを使用できます。

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

commit bb52995、[commit 3de651](https:/ githubcom / git /. (Junio C Hamano-gitster--[commit 72ce3ff](https://github.com/git/git/commit / 72ce3ff7b51c1e0703f43

format-patch: '--base'オプションを追加して、ベースツリー情報を記録します。

メンテナまたはサードパーティのテスターは、正確なベースツリーを知りたい場合があります。 パッチシリーズが適用されます。 git format-patchに「--base」オプションを教える。 ベースツリー情報を記録し、最初の最後に追加します。 メッセージ(カバーレターまたはシリーズの最初のパッチ)。

ベースツリー情報は、よく知られている「ベースコミット」で構成されています。 プロジェクト履歴の安定した部分の一部であるコミット。 それ以外の場合は、ゼロ以上の「前提条件パッチ」で動作します。 まだ「ベースコミット」の一部ではない飛行中の有名なパッチ。 これは、トポロジー順に「ベースコミット」の上に適用する必要があります。 パッチを適用する前に。

「base commit」は「 base-commit:」として表示され、その後に40-hexが続きます。 コミットオブジェクト名。 「前提条件パッチ」は「「前提条件パッチID:」」として表示され、その後に40ヘックスの「パッチID」が続きます。これは、「 git patch-id --stable」にパッチを渡すことで取得できます。"コマンド。

    • -。

Git 2.23(2019年第3四半期)はそれを改善します。これは、「 `format-patch」の「--base」オプションが不安定な方法で前提条件パッチの「patch-ids」を計算したためです。 「git patch-id --stable」と互換性のある方法。

commit a8f6855、[commit 6f93d26](https:/github.com. (Junio C Hamano-gitster--[commit 8202d12](https://github.com/git/git/commit/ 8202d12fca5d482640a

format-patch: --base patch-id出力を安定させます。

ハンクを処理するたびにコンテキストをフラッシュしていませんでした。 diff.cpatch-id生成コードですが、私たちがそれを行っていたときです。 「patch-id」ツールを使用して「安定した」パッチIDを生成しました。

patch-id.cから diff.cに同様のロジックを移植して、コマンドの 'format-patch --base ='タイプのパッチIDを生成するときに同じハッシュを取得できるようにします。呼び出し。

    • -。

Git 2.24(2019年第4四半期)以前は、「 git format-patch -o< outdir>」は「mkdir -p< outdir>」ではなく「mkdir< outdir>」に相当しました。」、修正中です。

commit edefc31(2019年10月11日)[Bertith Wesarg( bertwesarg)]を参照)]. (Junio C Hamano-gitster --[commit f1afbb0](https://github.com/git/git/commit / f1afbb063ff86e40caee314a

format-patch:出力ディレクトリの主要なコンポーネントを作成します。

Signed-off-by:Bert Wesarg< / sup>。

'git format-patch -o< outdir>'は、修正中の「mkdir< outdir>」と同等でした。 「mkdir -p< outdir>」ではありません。

セキュリティに影響を与える可能性のある主要なディレクトリでの「adjust_shared_perm」の使用は避けてください。 「git init」のように「config.sharedRepository」を一時的に無効にすることで達成されます。

解説 (0)

特定のコミット(最後のコミットではない)からパスを生成するには:

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
解説 (0)

指定したファイルをdiffするだけで、次のことができます。

git diff master 766eceb-接続/> 000-mysql-connector.patch。

解説 (0)

特定のSHA1に対してのみパッチを生成する方法は何ですか?

それは非常に簡単です:

オプション1。 git show commitID> myFile.patch

オプション2。 git commitID〜1。.commitID> myFile.patch

注:「commitID」を実際のコミットID(SHA1コミットコード)に置き換えます。

解説 (2)