日本語 ▾ トピック ▾ 最新バージョン ▾ git-show は 2.49.0 で最終更新されました

名前

git-show - さまざまな種類のオブジェクトを表示

概要

git show [<options>] [<object>…​]

説明

1つ以上のオブジェクト(blob、tree、tag、commit)を表示します。

コミットの場合、ログメッセージとテキストの差分を表示します。また、`git diff-tree --cc`によって生成されるような特殊な形式でマージコミットを表示します。

タグの場合、タグメッセージと参照オブジェクトを表示します。

ツリーの場合、名前を表示します(`git ls-tree` --name-only と同等)。

プレーンなblobの場合、プレーンな内容を表示します。

`git log`コマンドが理解するいくつかのオプションは、コミットが導入する変更をどのように表示するかを制御するために使用できます。

このマニュアルページでは、最も頻繁に使用されるオプションのみを説明します。

オプション

<object>…​

表示するオブジェクトの名前(デフォルトは`HEAD`)。オブジェクト名のより完全な指定方法のリストについては、gitrevisions[7]の「SPECIFYING REVISIONS」セクションを参照してください。

--pretty[=<format>]
--format=<format>

指定された形式でコミットログの内容を整形表示します。`<format>`は、`oneline`、`short`、`medium`、`full`、`fuller`、`reference`、`email`、`raw`、`format:<string>`、`tformat:<string>`のいずれかです。`<format>`が上記のいずれでもなく、`%placeholder`を含む場合、`--pretty=tformat:<format>`が指定されたかのように動作します。

各形式の詳細については、「PRETTY FORMATS」セクションを参照してください。=<format> の部分が省略された場合、デフォルトは medium です。

注: リポジトリ設定でデフォルトの整形形式を指定できます (git-config[1] を参照)。

--abbrev-commit

完全な40バイトの16進コミットオブジェクト名の代わりに、オブジェクトを一意に識別するプレフィックスを表示します。 「--abbrev=<n>」 (表示される場合、diff 出力も変更します) オプションを使用して、プレフィックスの最小長を指定できます。

これにより、「--pretty=oneline」が80桁の端末を使用する人々にとって格段に読みやすくなるはずです。

--no-abbrev-commit

40バイトの完全な16進数のコミットオブジェクト名を表示します。これは、明示的または「--oneline」などの他のオプションによって暗黙的に指定された`--abbrev-commit`を打ち消します。また、`log.abbrevCommit`変数を上書きします。

--oneline

これは、「--pretty=oneline --abbrev-commit」を一緒に使用するショートハンドです。

--encoding=<encoding>

コミットオブジェクトは、ログメッセージに使用される文字エンコーディングをエンコーディングヘッダーに記録します。このオプションは、ユーザーが好むエンコーディングでコミットログメッセージを再エンコードするようにコマンドに指示するために使用できます。非配管コマンドの場合、これはデフォルトでUTF-8です。オブジェクトが`X`でエンコードされていると主張し、`X`で出力している場合、オブジェクトはそのまま出力されることに注意してください。これは、元のコミットの無効なシーケンスが出力にコピーされる可能性があることを意味します。同様に、iconv(3)がコミットを変換できない場合、元のオブジェクトはそのまま出力されます。

--expand-tabs=<n>
--expand-tabs
--no-expand-tabs

ログメッセージを出力に表示する前に、タブ展開を実行します(各タブを`<n>`の倍数である次の表示列を埋めるのに十分なスペースに置き換えます)。`--expand-tabs`は`--expand-tabs=8`の略記であり、`--no-expand-tabs`は`--expand-tabs=0`の略記で、タブ展開を無効にします。

デフォルトでは、ログメッセージを4スペースでインデントする整形形式 (つまり、デフォルトである mediumfull、および fuller) ではタブが展開されます。

--notes[=<ref>]

コミットログメッセージを表示するときに、コミットに注釈を付けるノート(git-notes[1]を参照)を表示します。これは、コマンドラインで`--pretty`、`--format`、または`--oneline`オプションが指定されていない場合の`git` `log`、`git` `show`、および`git` `whatchanged`コマンドのデフォルトです。

デフォルトでは、表示されるノートは、`core.notesRef`および`notes.displayRef`変数(または対応する環境上書き)にリストされているノート参照からのものです。git-config[1]で詳細を参照してください。

オプションの`<ref>`引数を使用すると、ノートを表示するために参照を使用します。参照が`refs/notes/`で始まる場合、完全な参照名を指定できます。`notes/`で始まる場合、`refs/`がプレフィックスとして付加され、それ以外の場合は`refs/notes/`がプレフィックスとして付加されて完全な参照名が形成されます。

複数の --notes オプションを組み合わせて、表示するノートを制御できます。例: "--notes=foo" は "refs/notes/foo" からのノートのみを表示します。"--notes=foo --notes" は "refs/notes/foo" からのノートとデフォルトのノート参照の両方からノートを表示します。

--no-notes

ノートを表示しません。これは、ノートが表示されるノート参照のリストをリセットすることにより、上記の`--notes`オプションを打ち消します。オプションはコマンドラインで指定された順序で解析されるため、たとえば「--notes --notes=foo --no-notes --notes=bar」は「refs/notes/bar」からのノートのみを表示します。

--show-notes-by-default

特定のノートを表示するオプションが指定されていない限り、デフォルトのノートを表示します。

--show-notes[=<ref>]
--[no-]standard-notes

これらのオプションは非推奨です。代わりに上記の --notes/--no-notes オプションを使用してください。

--show-signature

署名されたコミットオブジェクトの有効性を gpg --verify に署名を渡して確認し、その出力を表示します。

PRETTY FORMATS

コミットがマージであり、かつ整形形式が`oneline`、`email`、または`raw`でない場合、`Author:`行の前に新しい行が挿入されます。この行は「Merge: 」で始まり、祖先コミットのハッシュがスペースで区切られて表示されます。履歴の表示を制限している場合(たとえば、特定のディレクトリやファイルに関連する変更のみに関心がある場合など)は、リストされたコミットが必ずしも直接の親コミットのリストであるとは限らないことに注意してください。

いくつかの組み込み形式があり、以下に説明するように、`pretty.<name>`構成オプションを別の形式名または`format:`文字列に設定することで、追加の形式を定義できます(git-config[1]を参照)。組み込み形式の詳細は次のとおりです。

  • oneline

    <hash> <title-line>

    これは、可能な限りコンパクトになるように設計されています。

  • short

    commit <hash>
    Author: <author>
    <title-line>
  • medium

    commit <hash>
    Author: <author>
    Date:   <author-date>
    <title-line>
    <full-commit-message>
  • full

    commit <hash>
    Author: <author>
    Commit: <committer>
    <title-line>
    <full-commit-message>
  • fuller

    commit <hash>
    Author:     <author>
    AuthorDate: <author-date>
    Commit:     <committer>
    CommitDate: <committer-date>
    <title-line>
    <full-commit-message>
  • reference

    <abbrev-hash> (<title-line>, <short-author-date>)

    この形式はコミットメッセージで別のコミットを参照するために使用され、`--pretty='format:%C`(auto)%h (%s, %ad)と同じです。デフォルトでは、別の`--date`オプションが明示的に指定されていない限り、日付は`--date=short`でフォーマットされます。形式プレースホルダーを持つ`format:`と同様に、その出力は`--decorate`や`--walk-reflogs`などの他のオプションの影響を受けません。

  • email

    From <hash> <date>
    From: <author>
    Date: <author-date>
    Subject: [PATCH] <title-line>
    <full-commit-message>
  • mboxrd

    email と同様ですが、コミットメッセージ内で "From " (0 個以上の ">" が先行) で始まる行は ">" で引用され、新しいコミットの開始と混同されないようにします。

  • raw

    `raw`形式は、コミットオブジェクトに保存されている通り、コミット全体を正確に表示します。特に、ハッシュは`--abbrev`または`--no-abbrev`が使用されているかどうかにかかわらず、完全に表示され、`parents`情報は、グラフや履歴の簡略化を考慮せずに、実際の親コミットを表示します。この形式は、コミットの表示方法に影響しますが、たとえば`git` `log` `--raw`で差分が表示される方法には影響しません。生の差分形式で完全なオブジェクト名を取得するには、`--no-abbrev`を使用します。

  • format:<format-string>

    format:<format-string> フォーマットを使用すると、表示したい情報を指定できます。これは printf フォーマットと少し似ていますが、顕著な違いとして、%n で改行を取得し、\n ではありません。

    例として、format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" は次のように表示されます。

    The author of fe6e0ee was Junio C Hamano, 23 hours ago
    The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<

    プレースホルダーは次のとおりです

    • 単一のリテラル文字に展開されるプレースホルダー

      %n

      改行

      %%

      生の %

      %x00

      %x の後に続く 2 桁の 16 進数字は、その 16 進数字の値を持つバイトに置き換えられます (これを本ドキュメントの残りの部分では「リテラルフォーマットコード」と呼びます)。

    • その後のプレースホルダのフォーマットに影響するプレースホルダ

      %Cred

      色を赤に切り替える

      %Cgreen

      色を緑に切り替える

      %Cblue

      色を青に切り替える

      %Creset

      色をリセットする

      %C(…​)

      git-config[1]の「CONFIGURATION FILE」セクションの「Values」で説明されている色の指定。デフォルトでは、色はログ出力が有効になっている場合のみ表示されます(`color.diff`、`color.ui`、または`--color`によって、端末に送信する場合は前者の`auto`設定を尊重します)。`%C`(auto,...)は、デフォルトの歴史的同義語として受け入れられます(例:`%C`(auto,red))。`%C`(always,...)を指定すると、色が有効でない場合でも色が表示されます(ただし、この形式やGitが色付けする可能性のある他のすべてを含め、出力全体の色を有効にするには`--color=always`を使用することを検討してください)。`auto`単独(つまり`%C`(auto))は、色が再度切り替わるまで、次のプレースホルダーで自動色付けをオンにします。

      %m

      左 (<), 右 (>) または境界 (-) マーク

      %w([<w>[,<i1>[,<i2>]]])

      git-shortlog[1] の -w オプションのように、行の折り返しを切り替えます。

      %<( <N> [,trunc|ltrunc|mtrunc])

      次のプレースホルダーが少なくともNカラム幅を占めるようにし、必要に応じて右側にスペースを埋め込みます。オプションで、出力がNカラムより長い場合、左(ltrunc)`..ft`、中央(mtrunc)`mi..le`、または末尾(trunc)`rig..`で省略記号`..`で切り詰めます。注1:切り詰めはN >= 2の場合にのみ正しく機能します。注2:NとM(下記参照)の値の周りのスペースはオプションです。注3:絵文字やその他の幅の広い文字は2つの表示カラムを占めるため、カラム境界を越える場合があります。注4:分解された文字の結合マークは、パディング境界で誤って配置される場合があります。

      %<|( <M> )

      次のプレースホルダが、少なくとも M 番目の表示列までを占めるようにし、必要に応じて右側にスペースを埋め込みます。端末ウィンドウの右端から測定される列位置には負の M 値を使用します。

      %>( <N> ), %>|( <M> )

      それぞれ %<( <N> ), %<|( <M> ) と同様ですが、左側にスペースを埋め込みます。

      %>>( <N> ), %>>|( <M> )

      それぞれ %>( <N> )%>|( <M> ) と同様ですが、次のプレースホルダが与えられたスペースよりも多くのスペースを占め、左側にスペースがある場合は、そのスペースを使用します。

      %><( <N> ), %><|( <M> )

      それぞれ %<( <N> ), %<|( <M> ) と同様ですが、両側にパディングします (つまり、テキストは中央揃えになります)。

    • コミットから抽出された情報に展開されるプレースホルダ

      %H

      コミットハッシュ

      %h

      短縮コミットハッシュ

      %T

      ツリーハッシュ

      %t

      短縮ツリーハッシュ

      %P

      親ハッシュ

      %p

      短縮親ハッシュ

      %an

      作者名

      %aN

      作者名 (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %ae

      作者メールアドレス

      %aE

      作者メールアドレス (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %al

      作者メールのローカルパート (@ 記号の前の部分)

      %aL

      作者ローカルパート (%al を参照) (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %ad

      作者日付 (--date= オプションの書式を尊重)

      %aD

      作者日付, RFC2822 形式

      %ar

      作者日付, 相対形式

      %at

      作者日付, UNIX タイムスタンプ

      %ai

      作者日付、ISO 8601 ライクな形式

      %aI

      作者日付, 厳密な ISO 8601 形式

      %as

      作者日付、短い形式 (YYYY-MM-DD)

      %ah

      作者日付、人間が判読できる形式 ( git-rev-list[1]--date=human オプションと同様)

      %cn

      コミッター名

      %cN

      コミッター名 (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %ce

      コミッターメールアドレス

      %cE

      コミッターメールアドレス (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %cl

      コミッターメールのローカルパート (@ 記号の前の部分)

      %cL

      コミッターのローカルパート (%cl を参照) (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %cd

      コミッター日付 (--date= オプションの書式を尊重)

      %cD

      コミッター日付, RFC2822 形式

      %cr

      コミッター日付, 相対形式

      %ct

      コミッター日付, UNIX タイムスタンプ

      %ci

      コミッター日付、ISO 8601 ライクな形式

      %cI

      コミッター日付, 厳密な ISO 8601 形式

      %cs

      コミッター日付、短い形式 (YYYY-MM-DD)

      %ch

      コミッター日付、人間が判読できる形式 ( git-rev-list[1]--date=human オプションと同様)

      %d

      参照名。 git-log[1] の --decorate オプションと同様

      %D

      参照名から「 (」、「)」の囲いを削除したもの。

      %(decorate[:<options>])

      カスタム装飾付きの参照名。`decorate`文字列の後にコロンと、0個以上のカンマ区切りのオプションが続く場合があります。オプション値にはリテラル書式設定コードが含まれる場合があります。これらは、オプション構文での役割のため、カンマ(`%x2C`)と閉じ括弧(`%x29`)に使用する必要があります。

      • prefix=<value>: 参照名のリストの前に表示されます。デフォルトは「 (」です。

      • suffix=<value>: 参照名のリストの後に表示されます。デフォルトは「)」です。

      • separator=<value>: 参照名の間に表示されます。デフォルトは「, 」です。

      • pointer=<value>: HEAD とそれが指すブランチの間に表示されます (もしあれば)。デフォルトは「 -> 」です。

      • tag=<value>: タグ名の前に表示されます。デフォルトは「tag: 」です。

    たとえば、囲いやタグの注釈がなく、スペースを区切り文字として使用する装飾を生成するには、次のようにします。

    + `%(decorate:prefix=,suffix=,tag=,separator= )`

    %(describe[:<options>])

    git-describe[1]のような人間が読める名前。説明できないコミットの場合は空文字列。`describe`文字列の後にコロンと0個以上のカンマ区切りのオプションが続く場合があります。タグが同時に追加または削除されると、説明は一貫性がなくなる可能性があります。

    • tags[=<bool-value>]: 注釈付きタグのみを考慮する代わりに、軽量タグも考慮します。

    • abbrev=<number>: 短縮されたオブジェクト名のデフォルトの16進数桁数(リポジトリ内のオブジェクトの数に応じて異なり、デフォルトは7)を使用する代わりに、<number>桁、または一意のオブジェクト名を形成するのに必要なだけの桁数を使用します。

    • match=<pattern>: 指定された glob(7) パターンに一致するタグのみを考慮し、"refs/tags/" プレフィックスは除外します。

    • exclude=<pattern>: 指定された glob(7) パターンに一致するタグは考慮せず、"refs/tags/" プレフィックスは除外します。

    %S

    コミットに到達した際にコマンドラインで与えられた参照名 (git log --source と同様)。git log でのみ機能します。

    %e

    エンコーディング

    %s

    件名

    %f

    ファイル名に適したサニタイズされた件名

    %b

    本文

    %B

    生の本文 (折り返されていない件名と本文)

    %N

    コミットノート

    %GG

    署名付きコミットに対する GPG からの生の検証メッセージ

    %G?

    有効な署名の場合は「G」、不正な署名の場合は「B」、不明な有効性を持つ有効な署名の場合は「U」、期限切れの有効な署名の場合は「X」、期限切れのキーによって作成された有効な署名の場合は「Y」、失効したキーによって作成された有効な署名の場合は「R」、署名をチェックできない場合(キーがないなど)は「E」、署名がない場合は「N」を表示します。

    %GS

    署名付きコミットの署名者名を表示

    %GK

    署名付きコミットの署名に使用された鍵を表示

    %GF

    署名付きコミットの署名に使用された鍵のフィンガープリントを表示

    %GP

    署名付きコミットの署名に使用されたサブキーのプライマリキーのフィンガープリントを表示

    %GT

    署名付きコミットの署名に使用されたキーの信頼レベルを表示

    %gD

    reflogセレクター。例:`refs/stash@{1}`または`refs/stash@{2` `minutes` `ago}`。形式は`-g`オプションで説明されているルールに従います。`@`の前の部分はコマンドラインで指定されたrefnameです(したがって`git` `log` `-g` `refs/heads/master`は`refs/heads/master@{0}`を生成します)。

    %gd

    短縮されたreflogセレクター。`%gD`と同じですが、refname部分は人間が読みやすいように短縮されます(したがって`refs/heads/master`は`master`になります)。

    %gn

    リフロッグ識別名

    %gN

    リフロッグ識別名 (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

    %ge

    リフロッグ識別メール

    %gE

    リフロッグ識別メール (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

    %gs

    リフロッグ件名

    %(trailers[:<options>])

    git-interpret-trailers[1]によって解釈された本文のトレーラーを表示します。`trailers`文字列の後にコロンと0個以上のカンマ区切りのオプションが続く場合があります。複数のオプションが指定された場合、最後のオプションが優先されます。

    • key=<key>: 指定された<key>を持つトレーラーのみを表示します。大文字と小文字を区別しない一致が行われ、末尾のコロンはオプションです。オプションが複数回指定された場合、いずれかのキーに一致するトレーラー行が表示されます。このオプションは自動的に`only`オプションを有効にし、トレーラーブロック内のトレーラー以外の行を非表示にします。これが望ましくない場合は、`only=false`で無効にできます。例:`%(trailers:key=Reviewed-by)`は、キー`Reviewed-by`を持つトレーラー行を表示します。

    • only[=<bool>]: トレーラーブロックからトレーラー以外の行を含めるかどうかを選択します。

    • separator=<sep>: トレーラー行間に挿入される区切り文字を指定します。デフォルトは改行文字です。文字列<sep>には、上記の書式設定コードのリテラルを含めることができます。カンマを区切り文字として使用するには、それ以外の場合は次のオプションとして解析されるため、`%x2C`を使用する必要があります。例:`%(trailers:key=Ticket,separator=%x2C )`は、キーが「Ticket」であるすべてのトレーラー行をカンマとスペースで区切って表示します。

    • unfold[=<bool>]: interpret-trailerの`--unfold`オプションが指定されたかのように動作させます。例:`%(trailers:only,unfold=true)`はすべてのトレーラー行を展開して表示します。

    • keyonly[=<bool>]: トレーラーのキー部分のみを表示します。

    • valueonly[=<bool>]: トレーラーの値部分のみを表示します。

    • key_value_separator=<sep>: 各トレーラーのキーと値の間に挿入される区切り文字を指定します。デフォルトは「: 」です。それ以外は、上記の separator=<sep> と同じ意味を持ちます。

一部のプレースホルダーは、リビジョン走査エンジンに与えられた他のオプションに依存する場合があります。たとえば、`%g*` reflogオプションは、reflogエントリを走査している場合(例:`git` `log` `-g`)を除き、空の文字列を挿入します。`%d`と`%D`プレースホルダーは、コマンドラインで`--decorate`がまだ提供されていない場合、「short」装飾形式を使用します。

ブールオプションはオプション値`[=<bool-value>]`を受け入れます。`--type=bool` git-config[1]で受け入れられる値(`yes`や`off`など)はすべて受け入れられます。`=<value>`なしでブールオプションを指定することは、`=true`を指定することと同じです。

プレースホルダーの % の後に + (プラス記号) を追加すると、プレースホルダーが空でない文字列に展開される場合にのみ、展開の直前に改行が挿入されます。

プレースホルダの % の後に - (マイナス記号) を追加すると、プレースホルダが空の文字列に展開される場合にのみ、展開の直前の連続する改行がすべて削除されます。

プレースホルダの % の後にスペースを追加すると、プレースホルダが空でない文字列に展開される場合にのみ、展開の直前にスペースが挿入されます。

  • tformat

    `tformat:`形式は、`format:`と全く同じように機能しますが、「区切り文字」セマンティクスの代わりに「終端文字」セマンティクスを提供します。言い換えれば、各コミットにはメッセージ終端文字(通常は改行)が追加され、エントリ間に区切り文字が配置されません。これは、単一行形式の最終エントリが、「oneline」形式と同様に、適切に改行で終端されることを意味します。たとえば

    $ git log -2 --pretty=format:%h 4da45bef \
      | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
    4da45be
    7134973 -- NO NEWLINE
    
    $ git log -2 --pretty=tformat:%h 4da45bef \
      | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
    4da45be
    7134973

    さらに、% を含む認識されない文字列は、先頭に tformat: が付いているかのように解釈されます。たとえば、これら 2 つは同等です。

    $ git log -2 --pretty=tformat:%h 4da45bef
    $ git log -2 --pretty=%h 4da45bef

DIFF FORMATTING

以下のオプションを使用して、`git` `show`が差分出力を生成する方法を変更できます。

` -p`
` -u`
`--patch`

パッチを生成します (Generating patch text with -p を参照)。

` -s`
`--no-patch`

差分生成機構からのすべての出力を抑制します。デフォルトでパッチを表示する`git` `show`のようなコマンドの出力を抑制したり、エイリアスでコマンドラインの早い段階で`--patch`、`--stat`のようなオプションの効果をキャンセルしたりするのに便利です。

-m

マージコミットの差分をデフォルト形式で表示します。これは`--diff-merges=on`に似ていますが、`-p`も指定しない限り`-m`は出力を生成しません。

-c

マージコミットの結合差分出力を生成します。`--diff-merges=combined` `-p`のショートカットです。

--cc

マージコミットの密結合差分出力を生成します。`--diff-merges=dense-combined` `-p`のショートカットです。

--dd

マージコミットと通常のコミットの両方について、最初の親との差分を生成します。`--diff-merges=first-parent` `-p`のショートカットです。

--remerge-diff

マージコミットの再マージ差分出力を生成します。`--diff-merges=remerge` `-p`のショートカットです。

--no-diff-merges

`--diff-merges=off`の同義語です。

--diff-merges=<format>

マージコミットに使用する差分形式を指定します。デフォルトは`--first-parent`が使用されている場合は`first-parent`、それ以外の場合は`dense-combined`です。

以下の形式がサポートされています

off, none

マージコミットの差分出力は無効にします。暗黙の値を上書きするのに便利です。

on, m

マージコミットの差分出力をデフォルト形式で表示します。デフォルト形式は`log.diffMerges`設定変数を使用して変更でき、そのデフォルト値は`separate`です。

first-parent, 1

最初の親に対する完全な差分を表示します。これは、非マージコミットに対して`--patch`が生成する形式と同じです。

separate

各親に対する完全な差分を表示します。各親に対して個別のログエントリと差分が生成されます。

combined, c

親と結果間のペアワイズな差分を一度に表示するのではなく、各親からマージ結果への差分を同時に表示します。さらに、すべての親から変更されたファイルのみをリストします。

dense-combined, cc

`--diff-merges=combined`によって生成される出力を、親内の内容に2つのバリアントしかなく、マージ結果が変更なしでそのうちの1つを選択するような興味のないハンクを省略することで、さらに圧縮します。

remerge, r

2つの親を持つマージコミットを再マージして、一時的なツリーオブジェクトを作成します。これには、競合マーカーなどを含むファイルが含まれる可能性があります。次に、その一時的なツリーと実際のマージコミットの差分が表示されます。

このオプションが使用されたときに出力される内容は変更される可能性があり、他のオプションとの相互作用も(明示的に文書化されていない限り)変更される可能性があります。

--combined-all-paths

結合された差分(マージコミットに使用される)が、すべての親からのファイル名をリストするようにします。したがって、`--diff-merges=`[dense-]combinedが使用されている場合にのみ効果があり、ファイル名の変更が検出された場合(つまり、名前変更またはコピー検出が要求された場合)にのみ有用である可能性があります。

` -U`<n>
`--unified=`<n>

通常の 3 行ではなく、<n> 行のコンテキストを持つ diff を生成します。--patch を含意します。

`--output=`<file>

標準出力ではなく、指定されたファイルに出力します。

`--output-indicator-new=`<char>
`--output-indicator-old=`<char>
`--output-indicator-context=`<char>

生成されるパッチで、新規行、古い行、コンテキスト行を示すために使用される文字を指定します。通常、それぞれ +-、' ' です。

`--raw`

各コミットについて、生の差分形式を使用して変更の概要を表示します。git-diff[1]の「RAW OUTPUT FORMAT」セクションを参照してください。これは、`--format=raw`で実現できる、ログ自体を生形式で表示するのとは異なります。

`--patch-with-raw`

-p --raw の同義語。

` -t`

差分出力にツリーオブジェクトを表示します。

`--indent-heuristic`

パッチを読みやすくするために diff ハンク境界をシフトするヒューリスティックを有効にします。これがデフォルトです。

`--no-indent-heuristic`

インデントヒューリスティックを無効にします。

`--minimal`

可能な限り最小の差分が生成されるように、余分な時間を費やします。

`--patience`

「patience diff」アルゴリズムを使用して差分を生成します。

`--histogram`

「ヒストグラム diff」アルゴリズムを使用して差分を生成します。

`--anchored=`<text>

「アンカー付き diff」アルゴリズムを使用して差分を生成します。

このオプションは複数回指定できます。

行がソースとデスティネーションの両方に存在し、一度だけ存在し、<text> で始まる場合、このアルゴリズムは出力に削除または追加として表示されないようにします。内部的には「patience diff」アルゴリズムを使用します。

`--diff-algorithm=`(patience|minimal|histogram|myers)

diff アルゴリズムを選択します。バリアントは以下の通りです

`default`
`myers`

基本的な貪欲な差分アルゴリズム。現在、これがデフォルトです。

`minimal`

可能な限り最小の差分が生成されるように、余分な時間を費やします。

`patience`

パッチを生成する際に「patience diff」アルゴリズムを使用します。

`histogram`

このアルゴリズムは、patience アルゴリズムを拡張して「出現頻度の低い共通要素をサポート」します。

たとえば、diff.algorithm 変数をデフォルト以外の値に設定している場合で、デフォルト値を使用したい場合は、--diff-algorithm=default オプションを使用する必要があります。

`--stat`[=<width>[,<name-width>[,<count>]]]

差分統計を生成します。デフォルトでは、ファイル名部分に必要に応じて多くのスペースが使用され、残りはグラフ部分に充てられます。最大幅はデフォルトで端末の幅、または端末に接続されていない場合は80カラムとなり、`<width>`で上書きできます。ファイル名部分の幅は、カンマの後に別の幅`<name-width>`を指定するか、`diff.statNameWidth=`<name-width>を設定することで制限できます。グラフ部分の幅は、`--stat-graph-width=`<graph-width>を使用するか、`diff.statGraphWidth=`<graph-width>を設定することで制限できます。`--stat`または`--stat-graph-width`を使用すると、統計グラフを生成するすべてのコマンドに影響しますが、`diff.statNameWidth`または`diff.statGraphWidth`を設定しても`git` `format-patch`には影響しません。3番目のパラメータ`<count>`を指定すると、出力が最初の`<count>`行に制限され、それ以上ある場合は`...`が続きます。

これらのパラメーターは、`--stat-width=`<width>、`--stat-name-width=`<name-width>、および`--stat-count=`<count>で個別に設定することもできます。

`--compact-summary`

ファイル作成または削除(「new」または「gone」、オプションでシンボリックリンクの場合は`+l`)およびモード変更(実行可能ビットの追加または削除の場合はそれぞれ`+x`または`-x`)などの拡張ヘッダー情報の要約を凝縮して出力します。この情報はファイル名部分とグラフ部分の間に配置されます。`--stat`を暗示します。

`--numstat`

`--stat`に似ていますが、追加および削除された行数を10進表記で、パス名を短縮せずに表示し、機械処理に適した形式にします。バイナリファイルの場合、`0` `0`と表示する代わりに2つの`-`を出力します。

`--shortstat`

変更されたファイルの総数、および追加および削除された行数を含む、--stat 形式の最後の行のみを出力します。

` -X` [<param>,...]
`--dirstat`[=<param>,...]

各サブディレクトリの変更量の相対的な分布を出力します。`--dirstat`の動作は、カンマ区切りのパラメータリストを渡すことでカスタマイズできます。デフォルトは`diff.dirstat`設定変数によって制御されます(git-config[1]を参照)。以下のパラメータが利用可能です。

`changes`

ソースから削除された行、または宛先に追加された行を数えることで、ディレクトリ統計の数値を計算します。これは、ファイル内の純粋なコードの移動量を無視します。言い換えれば、ファイル内の行の並べ替えは、他の変更ほど数えられません。これは、パラメータが指定されていない場合のデフォルトの動作です。

`lines`

通常の行ベースの差分分析を行い、削除/追加された行数を合計することで、ディレクトリ統計の数値を計算します。(バイナリファイルの場合は、行の自然な概念がないため、代わりに64バイトのチャンクを数えます)。これは`changes`の動作よりもコストのかかる`--dirstat`の動作ですが、ファイル内の並べ替えられた行を他の変更と同じくらい数えます。結果の出力は、他の`--*stat`オプションから得られるものと一貫しています。

`files`

変更されたファイルの数を数えることで、ディレクトリ統計の数値を計算します。各変更されたファイルは、ディレクトリ統計分析で等しくカウントされます。これは、ファイルの内容を全く調べる必要がないため、計算上最も安価な`--dirstat`の動作です。

`cumulative`

子ディレクトリの変更を親ディレクトリでもカウントします。`cumulative`を使用する場合、報告されるパーセンテージの合計が100%を超える場合があることに注意してください。デフォルト(非累積)の動作は、`noncumulative`パラメータで指定できます。

<limit>

整数パラメータはカットオフパーセンテージ (デフォルトは 3%) を指定します。変更のこのパーセンテージよりも貢献度が低いディレクトリは出力に表示されません。

例:次のコマンドは、変更されたファイルをカウントし、合計変更ファイルの10%未満のディレクトリを無視し、子ディレクトリのカウントを親ディレクトリに累積します:`--dirstat=files,10,cumulative`。

`--cumulative`

--dirstat=cumulative の同義語。

`--dirstat-by-file`[=<param>,...]

--dirstat=files,<param>,... の同義語。

`--summary`

作成、名前変更、モード変更などの拡張ヘッダー情報の要約を出力します。

`--patch-with-stat`

-p --stat の同義語。

` -z`

コミットを改行ではなく`NUL`で区切ります。

また、`--raw`または`--numstat`が指定されている場合、パス名を変換せず、`NUL`を出力フィールド区切り文字として使用します。

このオプションがない場合、「異常な」文字を含むパス名は、設定変数 core.quotePath (git-config[1] を参照) で説明されているように引用符で囲まれます。

`--name-only`

変更された各ファイルのポストイメージツリーのファイル名のみを表示します。ファイル名はしばしば UTF-8 でエンコードされています。詳細については、git-log[1] マニュアルページのエンコーディングに関する議論を参照してください。

`--name-status`

変更された各ファイルのファイル名と状態のみを表示します。状態文字の意味については、`--diff-filter`オプションの説明を参照してください。`--name-only`と同様に、ファイル名は通常UTF-8でエンコードされています。

`--submodule`[=<format>]

サブモジュールの差分表示方法を指定します。`--submodule=short`を指定すると、`short`形式が使用されます。この形式では、範囲の開始と終了のコミット名のみが表示されます。`--submodule`または`--submodule=log`が指定された場合、`log`形式が使用されます。この形式では、git-submodule[1] `summary`と同様に、範囲内のコミットがリストされます。`--submodule=diff`が指定された場合、`diff`形式が使用されます。この形式では、コミット範囲間のサブモジュールコンテンツの変更のインライン差分が表示されます。設定オプションが設定されていない場合、デフォルトは`diff.submodule`または`short`形式です。

`--color`[=<when>]

色付きの差分を表示します。`--color`(つまり`=`<when>なし)は`--color=always`と同じです。<when>は`always`、`never`、または`auto`のいずれかです。

`--no-color`

カラー差分をオフにします。--color=never と同じです。

`--color-moved`[=<mode>]

移動したコード行は異なる色で表示されます。オプションが指定されていない場合、<mode>は`no`に、モードなしでオプションが指定された場合、`zebra`にデフォルト設定されます。モードは以下のいずれかである必要があります。

`no`

移動した行はハイライトされません。

`default`

zebra の同義語です。これは将来、より sensible なモードに変更される可能性があります。

`plain`

ある場所で追加され、別の場所で削除された行は、`color.diff.newMoved`で色付けされます。同様に、差分内の別の場所で追加された削除された行には`color.diff.oldMoved`が使用されます。このモードは移動された行をすべて検出しますが、コードブロックが入れ替えなしで移動されたかどうかをレビューで判断するにはあまり役に立ちません。

`blocks`

少なくとも20個の英数字からなる移動されたテキストのブロックが貪欲に検出されます。検出されたブロックは、`color.diff.`(`old`|`new`)`Moved`の色でペイントされます。隣接するブロックは区別できません。

`zebra`

移動されたテキストのブロックは`blocks`モードと同様に検出されます。ブロックは`color.diff.`(`old`|`new`)`Moved`の色または`color.diff.`(`old`|`new`)`MovedAlternative`の色でペイントされます。2つの色の間の変化は、新しいブロックが検出されたことを示します。

`dimmed-zebra`

`zebra`に似ていますが、移動されたコードの興味のない部分の調光が追加で行われます。隣接する2つのブロックの境界線は興味深いと見なされ、残りは興味深いものではありません。`dimmed_zebra`は非推奨の同義語です。

`--no-color-moved`

移動検出をオフにします。これは設定を上書きするために使用できます。--color-moved=no と同じです。

`--color-moved-ws=`<mode>,...

これは、--color-moved の移動検出を実行する際に、空白文字をどのように無視するかを設定します。これらのモードはカンマ区切りリストとして指定できます。

`no`

移動検出を実行する際に空白文字を無視しません。

`ignore-space-at-eol`

行末の空白の変更を無視します。

`ignore-space-change`

空白の量の変更を無視します。これは行末の空白を無視し、1 つ以上の空白文字の他のすべてのシーケンスを同等と見なします。

`ignore-all-space`

行を比較する際に空白を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いを無視します。

`allow-indentation-change`

移動検出で最初にすべての空白を無視し、その後、空白の変更が行ごとに同じ場合にのみ、移動したコードブロックをブロックにグループ化します。これは他のモードと互換性がありません。

`--no-color-moved-ws`

移動検出を実行する際に空白を無視しません。これは設定を上書きするために使用できます。--color-moved-ws=no と同じです。

`--word-diff`[=<mode>]

デフォルトでは、単語は空白で区切られます。--word-diff-regex を参照してください。<mode> はデフォルトで plain であり、以下のいずれかである必要があります。

`color`

変更された単語を色のみを使用してハイライトします。--color を含意します。

`plain`

単語を`[-removed-]`および`{`added`}`として表示します。区切り文字が入力に出現してもエスケープしようとしないため、出力があいまいになる場合があります。

`porcelain`

スクリプトでの利用を意図した特別な行ベースの形式を使用します。追加/削除/変更なしの連続は、通常の統一差分形式で、行の先頭に`+`/`-`/` `文字で始まり、行の終わりまで続きます。入力の改行は、それ自身の行にチルダ`~`で表されます。

`none`

再度単語差分を無効にします。

最初のモード名にもかかわらず、有効な場合、すべてのモードで変更された部分をハイライトするために色が使用されることに注意してください。

`--word-diff-regex=`<regex>

空白文字の連続を単語と見なす代わりに、<regex> を使用して単語を決定します。また、既に有効になっていない限り、--word-diff を含意します。

`<regex>`の重複しない各一致は単語と見なされます。これらのマッチの間のものはすべて空白と見なされ、差分を見つける目的で無視されます(!)。すべての非空白文字にマッチするように、正規表現に`|[^[:space:]]`を追加することをお勧めします。改行を含むマッチは、改行で黙って切り捨てられます(!)。

たとえば、--word-diff-regex=. は各文字を単語として扱い、それに応じて文字ごとに差異を表示します。

正規表現は、diffドライバーまたは設定オプションを通じて設定することもできます。gitattributes[5]またはgit-config[1]を参照してください。明示的に指定すると、すべてのdiffドライバーまたは設定が上書きされます。diffドライバーは設定を上書きします。

`--color-words`[=<regex>]

--word-diff=color に加えて (正規表現が指定されている場合) --word-diff-regex=<regex> と同等です。

`--no-renames`

設定ファイルがデフォルトで有効にしている場合でも、名前変更検出をオフにします。

`--`[no-]rename-empty

空のブロブを名前変更元として使用するかどうか。

`--check`

変更によって競合マーカーや空白エラーが導入された場合に警告します。空白エラーと見なされるものは`core.whitespace`設定によって制御されます。デフォルトでは、末尾の空白(空白のみで構成される行を含む)と、行の初期インデント内にタブ文字が直後にあるスペース文字が空白エラーと見なされます。問題が見つかった場合、非ゼロのステータスで終了します。`--exit-code`とは互換性がありません。

`--ws-error-highlight=`<kind>

差分の`context`、`old`、または`new`行の空白エラーを強調表示します。複数の値はカンマで区切られ、`none`は以前の値をリセットし、`default`はリストを`new`にリセットし、`all`は`old,new,context`のショートハンドです。このオプションが指定されておらず、設定変数`diff.wsErrorHighlight`が設定されていない場合、`new`行の空白エラーのみが強調表示されます。空白エラーは`color.diff.whitespace`で色付けされます。

`--full-index`

パッチ形式出力を生成する際に、「index」行に最初の数文字ではなく、プレイメージとポストイメージの完全なブロブオブジェクト名を表示します。

`--binary`

--full-index に加えて、git-apply で適用できるバイナリ差分を出力します。--patch を含意します。

`--abbrev`[=<n>]

diff-raw形式の出力およびdiff-treeヘッダー行で40バイトの完全な16進オブジェクト名を表示する代わりに、オブジェクトを一意に参照する、少なくとも<n>桁の最短の接頭辞を表示します。diff-patch出力形式では、`--full-index`が優先されます。つまり、`--full-index`が指定されている場合、`--abbrev`に関係なく完全なblob名が表示されます。デフォルト以外の桁数は`--abbrev=`<n>で指定できます。

` -B`[<n>][/<m>]
`--break-rewrites`[=[<n>][/<m>]]

完全な書き換え変更を削除と作成のペアに分割します。これには2つの目的があります。

これは、ファイルの完全な書き換えに相当する変更を、削除と挿入が混じり合った一連の変更としてではなく、すべての古いものの単一の削除に続いてすべての新しいものの単一の挿入として表示する方法に影響し、数値`<m>`は`-B`オプションのこの側面を制御します(デフォルトは60%)。`-B/70%`は、Gitがそれを完全な書き換えと見なすためには、元のファイルの30%未満が結果に残る必要があることを指定します(つまり、そうでない場合、結果のパッチは、コンテキスト行と混じり合った削除と挿入の一連の変更になります)。

`-M`と一緒に使用すると、完全に書き換えられたファイルも名前変更のソースと見なされ(通常、`-M`は消滅したファイルのみを名前変更のソースと見なします)、数値`<n>`は`-B`オプションのこの側面を制御します(デフォルトは50%)。`-B20%`は、ファイルのサイズの20%以上の追加および削除を含む変更が、別のファイルへの名前変更の可能性のあるソースとして選択される資格があることを指定します。

` -M`[<n>]
`--find-renames`[=<n>]

差分を生成する場合、各コミットの名前変更を検出し、報告します。履歴をたどる際に名前変更をまたいでファイルを追跡するには、`--follow`を参照してください。<n>が指定されている場合、それは類似性インデックス(つまり、ファイルのサイズに対する追加/削除の量)のしきい値です。たとえば、`-M90%`は、ファイルの90%以上が変更されていない場合、Gitが削除/追加のペアを名前変更と見なすべきであることを意味します。`%`記号がない場合、数値は小数として、小数点の前にあるものとして読み取られます。つまり、`-M5`は0.5になり、したがって`-M50%`と同じです。同様に、`-M05`は`-M5%`と同じです。厳密な名前変更のみに検出を制限するには、`-M100%`を使用します。デフォルトの類似性インデックスは50%です。

` -C`[<n>]
`--find-copies`[=<n>]

名前変更だけでなく、コピーも検出します。--find-copies-harder も参照してください。<n> が指定されている場合、-M<n> と同じ意味を持ちます。

`--find-copies-harder`

パフォーマンス上の理由から、デフォルトでは`-C`オプションは、コピー元のファイルが同じ変更セット内で変更された場合にのみコピーを検出します。このフラグは、未変更ファイルをコピー元の候補として検査するようにコマンドに指示します。これは大規模なプロジェクトでは非常に高価な操作なので、注意して使用してください。`-C`オプションを複数指定しても同じ効果があります。

` -D`
`--irreversible-delete`

削除のプレイメージを省略します。つまり、ヘッダーのみを出力し、プレイメージと`/dev/null`の間の差分は出力しません。結果のパッチは`patch`や`git` `apply`で適用することを意図したものではありません。これは、変更後のテキストのレビューに集中したい人向けです。さらに、出力には、そのようなパッチを逆方向に、手動でさえも適用するのに十分な情報が明らかに不足しているため、このオプションの名前が付けられています。

-B とともに使用すると、削除/作成ペアの削除部分でもプレイメージを省略します。

` -l`<num>

`-M`および`-C`オプションは、名前変更/コピーのサブセットを安価に検出できるいくつかの予備ステップと、すべての残りのペアにならない宛先をすべての関連ソースと比較する網羅的なフォールバック部分を含みます。(名前変更の場合、残りのペアにならないソースのみが関連します。コピーの場合、すべての元のソースが関連します。)N個のソースと宛先の場合、この網羅的なチェックはO(N^2)です。このオプションは、関与するソース/宛先ファイルの数が指定された数を超えた場合、名前変更/コピー検出の網羅的な部分の実行を防止します。デフォルトは`diff.renameLimit`です。値0は無制限として扱われることに注意してください。

`--diff-filter=`[(A|C|D|M|R|T|U|X|B)...[*]]

追加(`A`)、コピー(`C`)、削除(`D`)、変更(`M`)、名前変更(`R`)、タイプ(通常ファイル、シンボリックリンク、サブモジュールなど)が変更(`T`)、マージされていない(`U`)、不明(`X`)、またはペアリングが破損(`B`)したファイルのみを選択します。フィルター文字の任意の組み合わせ(なしも含む)を使用できます。`*`(すべてまたはなし)が組み合わせに追加された場合、比較内の他の基準に一致するファイルが1つでもあれば、すべてのパスが選択されます。他の基準に一致するファイルがない場合、何も選択されません。

また、これらの大文字は小文字にすることで除外できます。例: --diff-filter=ad は追加および削除されたパスを除外します。

すべての差分がすべてのタイプを持つわけではないことに注意してください。たとえば、これらのタイプの検出が無効になっている場合、コピーおよび名前変更されたエントリは表示できません。

` -S`<string>

指定された <string> のファイル内の出現回数を変更する差分 (つまり、追加/削除) を検索します。スクリプト作成者向けです。

正確なコードブロック(構造体など)を探しており、そのブロックが最初に作成されてからの履歴を知りたい場合に便利です。興味深いブロックをプレイメージから`-S`に繰り返しフィードし、ブロックの最初のバージョンが見つかるまで続けます。

バイナリファイルも検索されます。

` -G`<regex>

パッチテキストに <regex> に一致する追加/削除行を含む差分を検索します。

`-S`<regex> `--pickaxe-regex`と`-G`<regex>の違いを説明するために、同じファイルで以下の差分を持つコミットを考えてみましょう。

+    return frotz(nitfol, two->ptr, 1, 0);
...
-    hit = frotz(nitfol, mf2.ptr, 1, 0);

一方、`git log -G"frotz\\(nitfol"`はこれらのコミットを表示しますが、`git log` `-S"frotz\\(nitfol" --pickaxe-regex`は表示しません(その文字列の出現回数が変化していないため)。

--text が指定されない限り、textconv フィルタがないバイナリファイルのパッチは無視されます。

詳細については、gitdiffcore[7]pickaxe エントリを参照してください。

`--find-object=`<object-id>

指定されたオブジェクトの出現回数を変更する差分を検索します。-S と同様ですが、引数が異なり、特定の文字列ではなく特定のオブジェクト ID を検索します。

オブジェクトはブロブまたはサブモジュールコミットにできます。git-log-t オプションを含意し、ツリーも検索します。

`--pickaxe-all`

-S または -G が変更を見つけた場合、<string> 内の変更を含むファイルだけでなく、その変更セット内のすべての変更を表示します。

`--pickaxe-regex`

-S に与えられた <string> を、マッチさせる拡張 POSIX 正規表現として扱います。

` -O`<orderfile>

出力にファイルが表示される順序を制御します。これは`diff.orderFile`設定変数(git-config[1]を参照)を上書きします。`diff.orderFile`をキャンセルするには、`-O/dev/null`を使用します。

出力順序は、`<orderfile>`内のグロブパターンの順序によって決定されます。最初のパターンに一致するパス名を持つすべてのファイルが最初に出力され、2番目のパターンに一致するパス名を持つすべてのファイル(ただし最初のパターンには一致しない)が次に出力され、というように続きます。どのパターンにも一致しないパス名を持つすべてのファイルは、ファイルの最後に暗黙のマッチオールパターンがあるかのように、最後に出力されます。複数のパス名が同じランクを持つ場合(同じパターンに一致し、それより前のパターンには一致しない)、それらの相互の出力順序は通常の順序です。

<orderfile> は次のように解析されます。

  • 空白行は無視されるため、可読性のための区切り文字として使用できます。

  • シャープ記号(「#」)で始まる行は無視されるため、コメントに使用できます。パターンがシャープ記号で始まる場合は、パターンの先頭にバックスラッシュ(「\」)を追加してください。

  • その他の各行には、単一のパターンが含まれます。

パターンは、`FNM_PATHNAME`フラグなしの`fnmatch`(3)で使用されるパターンと同じ構文とセマンティクスを持ちますが、パス名の最後のコンポーネントをいくつ削除してもパターンに一致する場合もパス名がパターンに一致します。たとえば、パターン「`foo*bar`」は「`fooasdfbar`」と「`foo/bar/baz/asdf`」には一致しますが、「`foobarx`」には一致しません。

`--skip-to=`<file>
`--rotate-to=`<file>

指定された`<file>`より前のファイルをアウトプットから破棄する(つまり*スキップする*)、またはアウトプットの最後に移動する(つまり*ローテーションする*)。これらのオプションは主に`git` `difftool`コマンドの使用のために考案されたものであり、それ以外ではあまり役に立たないかもしれません。

` -R`

2つの入力を交換します。つまり、インデックスまたはディスク上のファイルとツリーの内容との差分を表示します。

`--relative`[=<path>]
`--no-relative`

プロジェクトのサブディレクトリから実行された場合、このオプションを使用すると、ディレクトリ外の変更を除外して、それに対する相対パス名を表示するように指示できます。サブディレクトリにいない場合(たとえば、ベアリポジトリの場合)、`<path>`を引数として指定することで、出力を相対的にするサブディレクトリを指定できます。`--no-relative`は、`diff.relative`構成オプションと以前の`--relative`の両方を無効にするために使用できます。

` -a`
`--text`

すべてのファイルをテキストとして扱います。

`--ignore-cr-at-eol`

比較を行う際に、行末のキャリッジリターンを無視します。

`--ignore-space-at-eol`

行末の空白の変更を無視します。

` -b`
`--ignore-space-change`

空白の量の変更を無視します。これは行末の空白を無視し、1 つ以上の空白文字の他のすべてのシーケンスを同等と見なします。

` -w`
`--ignore-all-space`

行を比較する際に空白を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いを無視します。

`--ignore-blank-lines`

すべての行が空白である変更を無視します。

` -I`<regex>
`--ignore-matching-lines=`<regex>

すべての行が<regex>に一致する変更を無視します。このオプションは複数回指定できます。

`--inter-hunk-context=`<number>

diff のハンク間のコンテキストを指定された<number>行まで表示し、互いに近いハンクを結合します。設定オプションが設定されていない場合、デフォルトはdiff.interHunkContextまたは0です。

` -W`
`--function-context`

各変更のコンテキスト行として関数全体を表示します。関数名は、`git` `diff`がパッチハンクヘッダーを決定する方法と同じ方法で決定されます(gitattributes[5]の「Defining a custom hunk-header」を参照)。

`--ext-diff`

外部のdiffヘルパーの実行を許可します。gitattributes[5]で外部diffドライバーを設定した場合、git-log[1]とその仲間と一緒にこのオプションを使用する必要があります。

`--no-ext-diff`

外部diffドライバーの使用を禁止します。

`--textconv`
`--no-textconv`

バイナリファイルを比較する際に外部テキスト変換フィルターを実行することを許可(または禁止)します。gitattributes[5]を参照してください。textconvフィルターは通常一方向の変換であるため、生成された差分は人間が読むのには適していますが、適用することはできません。このため、textconvフィルターはデフォルトでgit-diff[1]git-log[1]でのみ有効になっており、git-format-patch[1]や差分配管コマンドでは有効になっていません。

`--ignore-submodules`[=(none|untracked|dirty|all)]

差分生成時にサブモジュールの変更を無視します。`all`がデフォルトです。`none`を使用すると、追跡されていないファイルまたは変更されたファイルが含まれている場合、または`HEAD`がスーパープロジェクトに記録されたコミットと異なる場合にサブモジュールが変更されたと見なされ、git-config[1]またはgitmodules[5]の`ignore`オプションの設定を上書きするために使用できます。`untracked`が使用された場合、サブモジュールは追跡されていないコンテンツのみを含んでいる場合はダーティとは見なされません(ただし、変更されたコンテンツについては引き続きスキャンされます)。`dirty`を使用すると、サブモジュールの作業ツリーへのすべての変更が無視され、スーパープロジェクトに保存されたコミットへの変更のみが表示されます(これは1.7.0までの動作でした)。`all`を使用すると、サブモジュールへのすべての変更が非表示になります。

`--src-prefix=`<prefix>

"a/" の代わりに指定されたソース <prefix> を表示します。

--dst-prefix=<prefix>

"b/" の代わりに指定された宛先 <prefix> を表示します。

--no-prefix

ソースまたは宛先のプレフィックスを表示しません。

--default-prefix

デフォルトのソースおよび宛先プレフィックス("a/"および"b/")を使用します。これは、diff.noprefixdiff.srcPrefixdiff.dstPrefixdiff.mnemonicPrefixなどの設定変数をオーバーライドします (git-config[1]参照)。

--line-prefix=<prefix>

出力の各行に、追加の<prefix>を付加します。

--ita-invisible-in-index

デフォルトでは、git add -Nで追加されたエントリは、git diffでは既存の空ファイルとして、git diff --cachedでは新しいファイルとして表示されます。このオプションを使用すると、エントリはgit diffでは新しいファイルとして、git diff --cachedでは存在しないものとして表示されます。このオプションは--ita-visible-in-indexで元に戻すことができます。両方のオプションは実験的なものであり、将来削除される可能性があります。

これらの共通オプションの詳細については、gitdiffcore[7]も参照してください。

-p によるパッチテキストの生成

git-diff[1]git-log[1]git-show[1]git-diff-index[1]git-diff-tree[1]、またはgit-diff-files[1]-pオプションとともに実行すると、パッチテキストが生成されます。パッチテキストの作成は、GIT_EXTERNAL_DIFFGIT_DIFF_OPTS環境変数 (git[1]参照)、およびdiff属性 (gitattributes[5]参照) を介してカスタマイズできます。

-pオプションが生成するものは、従来のdiff形式とは少し異なります。

  1. 以下のような"git diff"ヘッダーが前に付きます

    diff --git a/file1 b/file2

    名前変更/コピーが関与しない限り、a/b/のファイル名は同じです。特に、作成または削除の場合でも、/dev/nulla/またはb/のファイル名の代わりに使用されません

    リネーム/コピーが関与する場合、file1file2は、それぞれリネーム/コピーの元ファイルの名称と、リネーム/コピーによって生成されたファイルの名称を示します。

  2. その後に1つ以上の拡張ヘッダ行が続きます

    old mode <mode>
    new mode <mode>
    deleted file mode <mode>
    new file mode <mode>
    copy from <path>
    copy to <path>
    rename from <path>
    rename to <path>
    similarity index <number>
    dissimilarity index <number>
    index <hash>..<hash> <mode>

    ファイルモード<mode>は、ファイルタイプとファイルパーミッションビットを含む6桁の8進数で出力されます。

    拡張ヘッダのパス名には、a/およびb/のプレフィックスは含まれません。

    類似度インデックスは変更されていない行の割合であり、非類似度インデックスは変更された行の割合です。これは、パーセント記号が続く切り捨てられた整数です。したがって、類似度インデックス値の100%は2つの同じファイルのために予約されており、100%の非類似度は古いファイルからの行が新しいファイルに入らなかったことを意味します。

    インデックス行には、変更前と変更後のブロブオブジェクト名が含まれます。ファイルモードが変更されない場合は<mode>が含まれます。そうでない場合は、個別の行で古いモードと新しいモードが示されます。

  3. "特殊な"文字を含むパス名は、設定変数core.quotePathで説明されているように引用符で囲まれます(git-config[1]を参照)。

  4. 出力内のすべてのfile1ファイルはコミット前のファイルを指し、すべてのfile2ファイルはコミット後のファイルを指します。各変更を各ファイルに順次適用するのは誤りです。たとえば、このパッチはaとbを入れ替えます。

    diff --git a/a b/b
    rename from a
    rename to b
    diff --git a/b b/a
    rename from b
    rename to a
  5. Hunkヘッダは、そのhunkが適用される関数の名前を示します。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5]の「カスタムhunkヘッダの定義」を参照してください。

統合diff形式

差分を生成するコマンドは、マージを表示するときに結合差分を生成するために-cまたは--ccオプションを取ることができます。これは、git-diff[1]またはgit-show[1]でマージを表示するときのデフォルト形式です。また、特定の形式で差分の生成を強制するために、これらのコマンドのいずれかに適切な--diff-mergesオプションを指定できることにも注意してください。

"結合差分"形式は次のようになります

diff --combined describe.c
index fabadb8,cc95eb0..4866510
--- a/describe.c
+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@
	return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
  }

- static void describe(char *arg)
 -static void describe(struct commit *cmit, int last_one)
++static void describe(char *arg, int last_one)
  {
 +	unsigned char sha1[20];
 +	struct commit *cmit;
	struct commit_list *list;
	static int initialized = 0;
	struct commit_name *n;

 +	if (get_sha1(arg, sha1) < 0)
 +		usage(describe_usage);
 +	cmit = lookup_commit_reference(sha1);
 +	if (!cmit)
 +		usage(describe_usage);
 +
	if (!initialized) {
		initialized = 1;
		for_each_ref(get_name);
  1. -cオプションが使用された場合、次のような「git diff」ヘッダーが前に付きます。

    diff --combined file

    または、--ccオプションが使用された場合、次のようになります。

    diff --cc file
  2. その後に1つ以上の拡張ヘッダー行が続きます(この例では、2つの親を持つマージを示しています)。

    index <hash>,<hash>..<hash>
    mode <mode>,<mode>..<mode>
    new file mode <mode>
    deleted file mode <mode>,<mode>

    mode <mode>,<mode>..<mode>行は、少なくとも1つの<mode>が他のものと異なる場合にのみ表示されます。検出されたコンテンツ移動 (名前変更およびコピー検出) に関する情報を持つ拡張ヘッダーは、2つの<tree-ish>の差分で動作するように設計されており、結合差分形式では使用されません。

  3. その後に、2行のfrom-file/to-fileヘッダーが続きます。

    --- a/file
    +++ b/file

    従来のunified diff形式の2行ヘッダーと同様に、/dev/nullは作成または削除されたファイルを示すために使用されます。

    ただし、--combined-all-paths オプションが指定された場合、2行のfrom-file/to-fileではなく、N+1行のfrom-file/to-fileヘッダーが表示されます。ここでNはマージコミットの親の数です。

    --- a/file
    --- a/file
    --- a/file
    +++ b/file

    この拡張形式は、名前変更またはコピー検出が有効な場合に、異なる親におけるファイルの元の名前を表示できるため便利です。

  4. チャンクヘッダー形式は、誤ってpatch -p1にフィードされるのを防ぐために変更されました。結合差分形式はマージコミット変更のレビューのために作成され、適用されることを意図していませんでした。この変更は、拡張インデックスヘッダーの変更に似ています。

    @@@ <from-file-range> <from-file-range> <to-file-range> @@@

    結合差分形式のチャンクヘッダーには、(親の数 + 1)個の@文字があります。

従来のunified差分形式は、- (マイナス — Aには存在するがBでは削除された)、+ (プラス — AにはないがBに追加された)、または" " (スペース — 変更なし) のプレフィックスを持つ単一の列で2つのファイルAとBを示しますが、この形式は2つ以上のファイルfile1、file2、…​と1つのファイルXを比較し、Xが各fileNとどのように異なるかを示します。Xの行がfileNとどのように異なるかを示すために、各fileNの列が出力行の前に付けられます。

列Nの-文字は、その行がfileNには存在するが結果には存在しないことを意味します。列Nの+文字は、その行が結果には存在し、fileNにはその行がないこと (言い換えれば、その親の観点から行が追加されたこと) を意味します。

上記の出力例では、関数シグネチャが両方のファイルから変更されました (したがって、両方のfile1とfile2からの2つの-削除、およびfile1とfile2のどちらにも存在しない1つの行が追加されたことを意味する++)。また、他の8行はfile1と同じですがfile2には存在しません (したがって、+がプレフィックスとして付けられています)。

git diff-tree -cで表示される場合、マージコミットの親とマージ結果を比較します (つまり、file1..fileNは親です)。git diff-files -cで表示される場合、解決されていない2つのマージ親と作業ツリーファイルを比較します (つまり、file1はステージ2、別名「our version」、file2はステージ3、別名「their version」です)。

git show v1.0.0

タグv1.0.0と、そのタグが指すオブジェクトを表示します。

git show v1.0.0^{tree}

タグv1.0.0が指すツリーを表示します。

git show -s --format=%s v1.0.0^{commit}

タグv1.0.0が指すコミットの件名を表示します。

git show next~10:Documentation/README

ブランチnextの10番目の最後のコミット時点のファイルDocumentation/READMEの内容を表示します。

git show master:Makefile master:t/Makefile

ブランチmasterのヘッドにある上記のMakefilesの内容を連結します。

考察

Gitはある程度、文字エンコーディングに依存しません。

  • ブロブオブジェクトの内容は、解釈されないバイトのシーケンスです。コアレベルでのエンコーディング変換はありません。

  • パス名はUTF-8正規化形式Cでエンコードされます。これは、ツリーオブジェクト、インデックスファイル、参照名、およびコマンドライン引数、環境変数、設定ファイル (.git/config (git-config[1]参照)、gitignore[5]gitattributes[5]、およびgitmodules[5]) のパス名に適用されます。

    Gitはコアレベルではパス名を単に非NULバイトのシーケンスとして扱っており、パス名のエンコーディング変換は行われません (MacおよびWindowsを除く) ことに注意してください。したがって、非ASCIIパス名を使用しても、従来の拡張ASCIIエンコーディングを使用するプラットフォームやファイルシステムでもほとんどの場合機能します。ただし、そのようなシステムで作成されたリポジトリは、UTF-8ベースのシステム (例: Linux、Mac、Windows) では適切に動作せず、その逆も同様です。さらに、多くのGitベースのツールはパス名をUTF-8であると単純に仮定しており、他のエンコーディングを正しく表示できません。

  • コミットログメッセージは通常UTF-8でエンコードされますが、他の拡張ASCIIエンコーディングもサポートされています。これにはISO-8859-x、CP125xなどが含まれますが、UTF-16/32、EBCDIC、CJKマルチバイトエンコーディング (GBK、Shift-JIS、Big5、EUC-x、CP9xxなど) は含まれません

コミットログメッセージをUTF-8でエンコードすることを推奨しますが、コアとGit Porcelainの両方は、プロジェクトにUTF-8を強制しないように設計されています。特定のプロジェクトのすべての参加者が従来のエンコーディングを使用する方が便利であると判断した場合でも、Gitはそれを禁止しません。ただし、いくつか留意すべき点があります。

  1. git commitおよびgit commit-treeは、プロジェクトが従来のエンコーディングを使用することを明示的に指定しない限り、与えられたコミットログメッセージが有効なUTF-8文字列に見えない場合に警告を発します。これを指定する方法は、.git/configファイルに次のようにi18n.commitEncodingを設定することです。

    [i18n]
    	commitEncoding = ISO-8859-1

    上記の構成で作成されたコミットオブジェクトは、i18n.commitEncodingの値をそのencodingヘッダーに記録します。これは、後でそれらを見る他の人々を助けるためです。このヘッダーがない場合、コミットログメッセージはUTF-8でエンコードされていることを意味します。

  2. git loggit showgit blameなどは、コミットオブジェクトのencodingヘッダーを見て、特に指定がない限りログメッセージをUTF-8に再エンコードしようとします。.git/configファイルに次のようにi18n.logOutputEncodingを指定することで、希望する出力エンコーディングを指定できます。

    [i18n]
    	logOutputEncoding = ISO-8859-1

    この設定変数が存在しない場合、代わりにi18n.commitEncodingの値が使用されます。

コミット時にコミットオブジェクトレベルでUTF-8を強制するためにコミットログメッセージを再コードしないことを意図的に選択したことに注意してください。これは、UTF-8への再コードは必ずしも可逆操作ではないためです。

GIT

git[1]スイートの一部

scroll-to-top