回答:
試してください:
git format-patch -1 <sha>
または
git format-patch -1 HEAD
上記のドキュメントリンクによると、-1
フラグはパッチに含めるコミットの数をgitに伝えます。
-<n>
最上位のコミットからパッチを準備します。
次のコマンドでパッチを適用します。
git am < file.patch
git am --keep-cr < mypatch.patch
git format-patch -1 <sha> path/to/file.js
これはのみfile.jsのための差分を含むパッチを作成します
特定のsha1ハッシュの最上位のコミットからパッチを生成する場合:
git format-patch -<n> <SHA1>
単一のパッチファイル内の先頭からの最後の10パッチ:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
git format-patch -1 HEAD
最新のコミットのパッチを生成します
-2
got format-patch -2 HEAD
git format-patch HEAD~2
コミット1の後にコミットID 2があるとすると、実行できます。
git diff 2 1 > mypatch.diff
ここで、2と1はSHAハッシュです。
git diff hash^ hash
。「ハッシュ^」は、先行するコミットを示します。(しかし、もちろん、manojldsの答えの方が優れています)
git show HEAD > mypatch.diff
あなたがコミットしている間も同じことをするべきです。
git diff 1 2
このコマンド(@ Naftuli Tzvi Kayによってすでに提案されている):
git format-patch -1 HEAD
HEAD
特定のハッシュまたは範囲に置き換えます。
UNIXメールボックス形式のようにフォーマットされた最新のコミットのパッチファイルが生成されます。
-<n>
-最上位のコミットからパッチを準備します。
次に、次の方法でパッチファイルをメールボックス形式で再適用できます。
git am -3k 001*.patch
git
少なくともユーザーが正しい方法で適用した場合は、他のフォーマットされたパッチとは異なります。
-k
フラグ(git am -3
)を省略すると、この問題が修正されました(PATCH[0/10]
コミットメッセージはありません)。Gitバージョン2.20.1.windows.1
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
高速でシンプルなソリューション。
git apply --check patch-file-name
、パッチを適用する前に呼び出すことを忘れないでください。これは問題を回避するのに役立ちます。
(単一コミット)パッチが特定のコミットの上に確実に適用されるようにしたい場合は、新しい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
Xiaolong Ye( ``)によるcommit bb52995、commit 3de6651、commit fa2ab86、commit ded2c09(2016年4月26日)を参照してください。(による合併Junio C浜野- -で72ce3ffをコミット 2016年5月23日)
gitster
format-patch
:--base
ベースツリー情報を記録するための' 'オプションを追加メンテナーやサードパーティのテスターは、パッチシリーズが適用される正確なベースツリーを知りたい場合があります。git format-patchに '
--base
'オプションを教えて、ベースツリー情報を記録し、最初のメッセージ(カバーレターまたはシリーズの最初のパッチ)の最後に追加します。ベースツリー情報は、他の誰もが取り組むプロジェクト履歴の安定した部分の一部であるよく知られたコミットである「ベースコミット」と、よく知られているゼロ以上の「前提条件パッチ」で構成されます「ベースコミット」の一部ではない、進行中のパッチ。「ベースコミット」の上にトポロジー順に適用してからパッチを適用する必要があります。
「ベースコミット」は「
base-commit:
」として表示され、その後にコミットオブジェクト名の40 hexが続きます。
「必須パッチ」は「prerequisite-patch-id:
」の後に40進数の「パッチID」が続き、「git patch-id --stable
」コマンドでパッチを渡すことで取得できます。
Git 2.23(2019年第3四半期)は、 " --base
"のオプションが " と互換性のある方法で計算するように更新された不安定な方法で前提条件のパッチをformat-patch
計算したpatch-ids
ため、これが改善されgit patch-id --stable
ます。
Stephen Boyd()によるcommit a8f6855、commit 6f93d26(2019年4月26日)を参照してください。(合併によりJunio C浜野- -で8202d12コミットし、2019年6月13日)をakshayka
gitster
format-patch
:--base patch-id
出力を安定させるの
patch-id
生成コードでハンクを処理するたびにコンテキストをフラッシュしていませんでしたdiff.c
が、 'patch-id
'ツールを使用して「安定した」パッチIDを生成したときにそれを行っていました。レッツ・ポート同様のロジックそれ以上から
patch-id.c
にdiff.c
私たちは同じハッシュを取得することができるようにする場合「の私たちだ生成パッチ-IDSformat-patch --base=
コマンド呼び出しの種類」。
Git 2.24(2019年第4四半期)より前git format-patch -o <outdir>
は、「mkdir <outdir>
」は「mkdir -p <outdir>
」ではなく「」と同等でしたが、修正中です。
Bert Wesarg()によるcommit edefc31(2019年10月11日)を参照してください。(合併によりJunio C浜野- -でコミットf1afbb0、2019年10月18日)bertwesarg
gitster
format-patch
:出力ディレクトリの主要コンポーネントを作成しますサインオフ:Bert Wesarg
'git format-patch -o'は 'mkdir -p'ではなく 'mkdir'と同等でしたが、修正中です。
adjust_shared_perm
セキュリティに影響を与える可能性がある先頭のディレクトリでの ' ' の使用を避けます。「config.sharedRepository
」のように「git init
」を一時的に無効にすることで実現しました。
Git 2.25(2020年第1四半期)では、構成変数が設定されていると「git rebase
」format.useAutoBase
が正しく機能しませんでしたが、これは修正されました。
Denton Liu()によるcommit cae0bc0、commit 945dc55、commit 700e006、commit a749d01、commit 0c47e06(2019年12月4日)を参照してください。(合併によりJunio C浜野- -で71a7de7コミットし、2019年12月16日)をDenton-L
gitster
rebase
:format.useAutoBase
破損を修正報告者:Christian Biesinger
署名者:Denton Liuでは
format.useAutoBase = true
、リベースを実行するとエラーが発生しました。fatal: failed to get upstream, if you want to record base commit automatically, please use git branch --set-upstream-to to track a remote branch. Or you could specify base commit by --base=<base-commit-id> manually error: git encountered an error while preparing the patches to replay these revisions: ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12 As a result, git cannot rebase them.
これを修正するには、常に
--no-base
rebaseからformat-patchに渡して、の効果format.useAutoBase
が無効になるようにします。
特定のSHA1に対してのみパッチを生成する方法は何ですか?
それは非常に簡単です:
オプション1。 git show commitID > myFile.patch
オプション2。 git commitID~1..commitID > myFile.patch
注:commitID
実際のコミットID(SHA1コミットコード)に置き換えます。
git apply --stat file.patch
#show stats。git apply --check file.patch
#適用する前にエラーをチェックします。git am < file.patch
#最後にパッチを適用します。