web-dev-qa-db-ja.com

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

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

私はgit format-patch <the SHA1>を使用しようとしました、しかしそれはそのSHA1以来各コミットのためにパッチを生成しました。数百のパッチが生成された後、私はプロセスを殺さなければなりませんでした。

特定のSHA1専用のパッチを生成する方法はありますか?

1079
elle

試してください:

git format-patch -1 <sha>

または

git format-patch -1 HEAD

上記のドキュメンテーションリンクによれば、-1フラグはgitにパッチに含まれるべきコミットの数を伝えます。

- <n>

一番上のコミットからパッチを準備します。


次のコマンドでパッチを適用します。

git am < file.patch
1722
manojlds

特定のsha1ハッシュから一番上のコミットからパッチを生成するには:

git format-patch -<n> <SHA1>

単一のパッチファイルのheadから最後の10個のパッチ:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
259
Sriram Murali

コミット1の後にコミットID 2があるとします。

git diff 2 1 > mypatch.diff

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

77
brandon

このコマンド( @ Naftuli Tzvi Kay によって既に示唆されているように):

git format-patch -1 HEAD

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

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

-<n> - 一番上のコミットからパッチを準備する.

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

git am -3k 001*.patch

man git-format-patch を参照してください。

55
kenorb
git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

速くて簡単な解決策。

24
zdrsoft

(シングルコミット)パッチが特定のコミットの上に確実に適用されるようにしたい場合は、新しい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

コミットbb52995コミット3de6651コミットfa2ab86コミットded2c09 (26 Apr 2016)by Xiaolong Ye( ``) を参照。
Junio C Hamano - gitster - in commit 72ce3ff 、2016年5月23日にマージ)

format-patch:ベースツリー情報を記録するために '--base'オプションを追加

メンテナやサードパーティのテスターは、パッチシリーズが適用される正確なベースツリーを知りたいと思うかもしれません。ベースツリー情報を記録し、それを最初のメッセージの最後に追加するための '--base'オプションをgit format-patchに教えてください(カバーレターかシリーズの最初のパッチ)。

基本ツリーの情報は、他の人が作業しているプロジェクト履歴の安定した部分である「基本コミット」と、よく知られている0個以上の「必須パッチ」で構成されています。パッチが適用される前にトポロジベースの順序で「ベースコミット」の上に適用される必要がある「ベースコミット」の一部ではない飛行中のパッチ。

「基本コミット」は、「base-commit:」の後にコミットオブジェクト名の40桁の16進数が続きます。
「必須パッチ」は、「prerequisite-patch-id:」の後に40ックスの「patch id」が続き、「git patch-id --stable」コマンドを介してパッチを渡すことで取得できます。

8
VonC

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

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
6
Makah

単に指定したファイルをdiffしたいだけなら、次のことができます。

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

4
jiahut