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

名前

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

書式

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

説明

1つ以上のオブジェクト (ブロブ、ツリー、タグ、コミット) を表示します。

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

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

ツリーの場合は、名前を表示します (--name-only オプションを指定した git ls-tree と同等です)。

プレーンブロブの場合は、そのプレーンな内容を表示します。

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

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

オプション

<object>…​

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

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

指定された形式でコミットログの内容を整形出力します。ここで、<format>onelineshortmediumfullfullerreferenceemailrawformat:<string>tformat:<string> のいずれかになります。<format> が上記以外の値で、%placeholder が含まれている場合、--pretty=tformat:<format> が指定されたかのように動作します。

各形式の詳細については、「整形形式」セクションを参照してください。=<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 loggit showgit 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 に渡し、その出力を表示します。

整形形式

コミットがマージであり、整形形式が onelineemail、または 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 」で始まる行 (ゼロ個以上の「>」が前にあるもの) は、「>」で引用符付けされるため、新しいコミットの開始と混同されることはありません。

  • raw

    raw 形式は、コミットオブジェクトに格納されているコミット全体をそのまま表示します。特に、ハッシュは --abbrev または --no-abbrev が使用されているかどうかにかかわらず、完全に表示され、parents 情報は、グラフまたは履歴の単純化を考慮せずに、実際の親コミットを表示します。この形式は、コミットの表示方法には影響しますが、git log --raw などで差分が表示される方法には影響しません。raw diff形式で完全なオブジェクト名を取得するには、--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] の「設定ファイル」セクションの「値」で説明されている色の指定。デフォルトでは、色はログ出力に対して有効になっている場合にのみ表示されます (color.diffcolor.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列より長い場合、左 (`..ft`) (ltrunc)、中央 (`mi..le`) (mtrunc)、または末尾 (`rig..`) (trunc) で省略記号 .. を使って省略できます。注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 文字列の後にコロンとゼロ個以上のカンマ区切りのオプションが続く場合があります。オプション値にはリテラル書式コードを含めることができます。これらは、オプション構文での役割のため、カンマ (%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 文字列の後にコロンとゼロ個以上のカンマ区切りのオプションが続く場合があります。タグが同時に追加または削除されると、説明が一貫しない場合があります。

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

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

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

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

    %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 オプションで説明されている規則に従います。@ の前の部分は、コマンドラインで指定された参照名です (したがって、git log -g refs/heads/masterrefs/heads/master@{0} を返します)。

    %gd

    短縮された reflog セレクター。%gD と同じですが、参照名の部分が人間が読めるように短縮されています (したがって、refs/heads/master は単に master になります)。

    %gn

    reflog 識別名

    %gN

    reflog 識別名 (.mailmap を考慮、git-shortlog[1] または git-blame[1] を参照)

    %ge

    reflog 識別メールアドレス

    %gE

    reflog 識別メールアドレス (.mailmap を考慮、git-shortlog[1] または git-blame[1] を参照)

    %gs

    reflog サブジェクト

    %(trailers[:<options>])

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

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

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

    • separator=<sep>: トレーラー行間に挿入される区切り文字を指定します。デフォルトは改行文字です。<sep> 文字列には、上記のLiteral Formatting Codesを含めることができます。カンマを区切り文字として使用するには、%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>] を受け入れます。git-config[1]--type=bool で受け入れられる yesoff などの値はすべて受け入れられます。=<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

差分フォーマット

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

-p
-u
--patch

パッチを生成します (パッチテキストを -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>

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

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

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> 行のコンテキストを持つ差分を生成します。--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

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

--no-indent-heuristic

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

--minimal

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

--patience

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

--histogram

"histogram diff" アルゴリズムを使用して差分を生成します。

--anchored=<text>

"anchored diff" アルゴリズムを使用して差分を生成します。

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

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

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

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

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

ソースから削除された行、またはデスティネーションに追加された行を数えることでdirstatの数値を計算します。これは、ファイル内の純粋なコード移動の量を無視します。言い換えれば、ファイル内の行を再配置しても、他の変更ほどはカウントされません。パラメータが指定されていない場合のデフォルトの動作です。

lines

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

files

変更されたファイルの数を数えることでdirstatの数値を計算します。各変更ファイルはdirstat解析で等しくカウントされます。これは、ファイルの内容を全く見る必要がないため、計算上最も安価な --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>alwaysnever、または auto のいずれかです。

--no-color

色付き差分をオフにします。これは --color=never と同じです。

--color-moved[=<mode>]

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

no

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

default

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

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

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

--no-color-moved-ws

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

--word-diff[=<mode>]

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

color

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

plain

単語を [-削除済み-] および {追加済み} として表示します。区切り文字が入力に現れてもエスケープしようとしないため、出力が曖昧になる可能性があります。

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>

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

--full-index

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

--binary

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

--abbrev[=<n>]

差分RAW形式出力および差分ツリーヘッダー行で、完全な40バイトの16進オブジェクト名を表示する代わりに、オブジェクトを一意に参照する最短のプレフィックスで、少なくとも <n> 桁の16進数長を表示します。差分パッチ出力形式では、--full-index が優先されます。つまり、--full-index が指定されている場合、--abbrev にかかわらず完全なブロブ名が表示されます。デフォルト以外の桁数は --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 の間の差分は出力しません。結果のパッチは patchgit 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>

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

-W
--function-context

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

--ext-diff

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

--no-ext-diff

外部の差分ドライバーを不許可にします。

--textconv
--no-textconv

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

--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.dstPrefix、および diff.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 オプションが生成するものは、従来の差分形式とはわずかに異なります。

  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. 「 unusual 」な文字を含むパス名は、設定変数 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. ハンクヘッダーには、そのハンクが適用される関数の名前が記載されています。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5] の「カスタムハンクヘッダーの定義」を参照してください。

結合差分形式

任意の差分生成コマンドは、マージを表示する際に -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. 次のような「git diff」ヘッダーが前に付きます(-c オプションが使用された場合)。

    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差分形式の2行ヘッダーと同様に、/dev/null は作成または削除されたファイルを示すために使用されます。

    ただし、--combined-all-paths オプションが指定された場合、2行のfrom-file/to-fileの代わりに、マージコミット内の親の数Nに応じたN+1行のfrom-file/to-fileヘッダーが得られます。

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

    この拡張形式は、リネームまたはコピー検出がアクティブな場合に、異なる親におけるファイルの元の名前を確認できるため、役立つことがあります。

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

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

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

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

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

上記の出力例では、関数シグネチャが両方のファイルから変更されています(したがって、file1とfile2の両方から2つの - による削除があり、さらに追加された1行がfile1またはfile2のいずれにも存在しないことを意味する ++ があります)。また、他の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はコアレベルではパス名を単に非NULLバイトのシーケンスとして扱っており、パス名エンコーディングの変換は行われないことに注意してください(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

    上記の設定で作成されたコミットオブジェクトは、encoding ヘッダーに i18n.commitEncoding の値を記録します。これは、後でそれらを見る他の人々を助けるためです。このヘッダーがない場合、コミットログメッセージは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