18

最近、入力が簡単で、コミット情報(タイムスタンプ、ユーザー、ハッシュ、コメント)が表示git show <hash>されるため、後で参照できるように差分を作成するために使用しています。git diff <hash>~ <hash>その後、を使用git apply <filename>してパッチを適用できます。

git show -3最後の3つのコミットと同じ追加情報が表示されることを発見しました。ただし、git applyステージングされていない変更としてすべてが作業ディレクトリに押しつぶされ、すべてのコミット情報が失われます。

そのすべての情報を適用するgitに何かがありますか?パッチを3つのファイルに分割し、それらを個別に適用して新しいコミットを作成するよりも、フラグを渡す方がはるかに簡単です。

4

3 に答える 3

11

git format-patchメタデータ(メッセージ、作成者など)を含むコミットを表すMIME電子メールを生成するために使用できます。次に、これらをで再適用できますgit am

したがってgit format-patch HEAD~3、最後の3つのコミットに対して3つのパッチを生成し、これらすべてをにパイプすることができますgit am。簡単にしたい場合はgit format-patch --stdout HEAD~3、MIMEメッセージをstdoutに送信するので、3つの別々のファイルを処理する代わりに、必要な場所にメッセージをパイプできます。

もちろん、後で参照するためにコミットを保存しようとしている場合は、それらにタグを付けてみませんか?その後、を使用してそれらからコミットを再適用できますgit cherry-pick

于 2012-10-12T22:56:06.943 に答える
7

Linuxでは、コマンドを使用してdelta-generator ---git-showまたはgit-diffたとえば---をパイプできますgit-apply

(オプションを使用して常に3方向マージを有効にする方が安全である可能性もあり-3ます)

> git show <sha1> [<path>] | git apply -3
> git diff <sha1-a> <sha1-b> [<path>] | git apply -3

例:

  • abcdefで作成された特定のファイルに編集を適用します。
> git show abcdef dir/file.c | git apply -3
  • 2つの異なるコミットabcdef123456のファイルに違いを適用します

> git diff abcdef 123456 foo.h | git apply -3

参照:https ://stackoverflow.com/a/12320940/1329340

于 2015-07-20T09:58:20.650 に答える
2

git bundle履歴の特定の部分を送信してみてください。

于 2012-10-13T03:26:19.513 に答える