セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.50.1 変更なし
-
2.50.0
2025-06-16
- 2.49.1 変更なし
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 変更なし
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.3 変更なし
-
2.46.0
2024-07-29
- 2.45.4 変更なし
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 変更なし
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 変更なし
-
2.44.0
2024-02-23
- 2.43.3 → 2.43.7 変更なし
-
2.43.2
2024-02-13
- 2.43.1 変更なし
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 変更なし
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 変更なし
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 変更なし
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 変更なし
-
2.39.0
2022-12-12
- 2.38.3 → 2.38.5 変更なし
-
2.38.2
2022-12-11
- 2.38.1 変更なし
-
2.38.0
2022-10-02
- 2.37.1 → 2.37.7 変更なし
-
2.37.0
2022-06-27
- 2.36.1 → 2.36.6 変更なし
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 変更なし
-
2.35.0
2022-01-24
- 2.33.3 → 2.34.8 変更なし
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 変更なし
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 変更なし
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 変更なし
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 変更なし
-
2.29.0
2020-10-19
- 2.28.1 変更なし
-
2.28.0
2020-07-27
- 2.27.1 変更なし
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 変更なし
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 変更なし
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 変更なし
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 変更なし
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 変更なし
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 変更なし
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 変更なし
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 変更なし
-
2.19.2
2018-11-21
- 2.19.1 変更なし
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 変更なし
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 変更なし
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
説明
コミットログを表示します。
指定されたコミットから parent
リンクをたどって到達可能なコミットをリストしますが、先頭に ^ が付いているコミットから到達可能なコミットは除外します。出力はデフォルトで逆時系列順になります。
これは集合演算と考えることができます。コマンドラインで与えられた任意のコミットから到達可能なコミットは集合を形成し、その集合から、先頭に ^ が付いている任意のコミットから到達可能なコミットが差し引かれます。残りのコミットがコマンドの出力になります。さまざまなその他のオプションとパスパラメータを使用して、結果をさらに制限することができます。
したがって、次のコマンドは
$ git log foo bar ^baz
「foo または bar から到達可能だが、baz からは到達不可能なすべてのコミットをリストする」という意味になります。
特殊な表記「<commit1>..<commit2>」は、「^<commit1> <commit2>」の短縮形として使用できます。たとえば、次のいずれも交換可能です。
$ git log origin..HEAD $ git log HEAD ^origin
もう1つの特殊な表記は、マージに役立つ「<commit1>…<commit2>」です。結果として得られるコミットの集合は、2つのオペランド間の対称差です。次の2つのコマンドは同等です。
$ git log A B --not $(git merge-base --all A B) $ git log A...B
このコマンドは、表示内容と方法を制御するための git-rev-list[1] コマンドに適用可能なオプションと、各コミットが導入する変更の表示方法を制御するための git-diff[1] コマンドに適用可能なオプションを取ります。
オプション
- --follow
-
ファイルの名前変更を超えてファイルの履歴をリストし続けます (単一ファイルの場合にのみ機能します)。
- --no-decorate
- --decorate[=short|full|auto|no]
-
表示されるコミットの参照名を出力します。short が指定されている場合、参照名のプレフィックス refs/heads/、refs/tags/、および refs/remotes/ は出力されません。full が指定されている場合、完全な参照名 (プレフィックスを含む) が出力されます。auto が指定されている場合、出力が端末に向かっている場合は short が指定されたかのように参照名が表示され、それ以外の場合は参照名は表示されません。
--decorate
オプションは--decorate=short
の短縮形です。設定されている場合はlog.decorate
の設定値にデフォルト設定され、それ以外の場合はauto
にデフォルト設定されます。 - --decorate-refs=<pattern>
- --decorate-refs-exclude=<pattern>
-
各候補参照について、
--decorate-refs-exclude
に与えられたパターンに一致する場合、または--decorate-refs
に与えられたパターンのいずれにも一致しない場合は、装飾には使用しません。log.excludeDecoration
設定オプションは、参照を装飾から除外することを許可しますが、明示的な--decorate-refs
パターンはlog.excludeDecoration
の一致をオーバーライドします。これらのオプションまたは設定のいずれも指定されていない場合、参照は
HEAD
、refs/heads/
、refs/remotes/
、refs/stash/
、またはrefs/tags/
に一致する場合に装飾として使用されます。 - --clear-decorations
-
このオプションを指定すると、以前のすべての
--decorate-refs
または--decorate-refs-exclude
オプションがクリアされ、デフォルトの装飾フィルターがすべての参照を含むように緩和されます。設定値log.initialDecorationSet
がall
に設定されている場合、このオプションは仮定されます。 - --source
-
各コミットに到達したコマンドラインで指定された参照名を出力します。
- --[no-]mailmap
- --[no-]use-mailmap
-
mailmap ファイルを使用して、著者名とコミッター名、およびメールアドレスを正規の氏名とメールアドレスにマッピングします。git-shortlog[1] を参照してください。
- --full-diff
-
このフラグがない場合、
git
log
-p
<path>... は指定されたパスに触れるコミットと、同じ指定されたパスに関する差分を表示します。これを使用すると、指定されたパスに触れるコミットの完全な差分が表示されます。これは、「<path>…」がコミットのみを制限し、それらのコミットの差分を制限しないことを意味します。これは、
--stat
などによって生成されるすべての diff ベースの出力タイプに影響することに注意してください。 - --log-size
-
各コミットの出力に「log size <number>」という行を含めます。ここで <number> はそのコミットのメッセージのバイト長です。
git
log
出力からログメッセージを読み取るツールが事前に領域を割り当てることを可能にすることで、そのツールを高速化することを意図しています。 - -L<start>,<end>:<file>
- -L:<funcname>:<file>
-
<file> 内で、<start>,<end> で与えられる行範囲、または関数名の正規表現 <funcname> の進化をトレースします。パススペック制限子を与えることはできません。これは現在、単一のリビジョンから始まるウォークに限定されており、つまり、正のリビジョン引数を0または1つしか与えることができず、<start> と <end> (または <funcname>) は開始リビジョンに存在する必要があります。このオプションは複数回指定できます。
--patch
を暗黙的に指定します。--no-patch
を使用してパッチ出力を抑制できますが、他の差分形式 (特に--raw
、--numstat
、--shortstat
、--dirstat
、--summary
、--name-only
、--name-status
、--check
) は現在実装されていません。<start> と <end> は次のいずれかの形式を取ることができます
-
number
<start> または <end> が数字の場合、それは絶対行番号 (行は1から数えられます) を指定します。
-
/regex/
この形式は、与えられた POSIX 正規表現に一致する最初の行を使用します。<start> が正規表現の場合、前の
-L
範囲があればその末尾から、なければファイルの先頭から検索します。<start> が^/regex/
の場合、ファイルの先頭から検索します。<end> が正規表現の場合、<start> で与えられた行から検索を開始します。 -
+offset or -offset
これは <end> にのみ有効で、<start> で与えられた行の前または後の行数を指定します。
<start> と <end> の代わりに
:
<funcname> が与えられた場合、それは <funcname> に一致する最初の funcname 行から次の funcname 行までの範囲を示す正規表現です。:
<funcname> は、前の-L
範囲があればその末尾から、なければファイルの先頭から検索します。^:
<funcname> はファイルの先頭から検索します。関数名は、git
diff
がパッチのハunkヘッダーを決定する方法と同じ方法で決定されます (gitattributes[5] の「Defining a custom hunk-header」を参照)。 -
- <revision-range>
-
指定されたリビジョン範囲内のコミットのみを表示します。<revision-range> が指定されていない場合、デフォルトは
HEAD
(つまり、現在のコミットに至る全履歴) です。origin..HEAD
は、現在のコミット (HEAD
) から到達可能なすべてのコミットを、ただしorigin
からは到達不可能なコミットを除外して指定します。<revision-range> を指定する完全な方法のリストについては、gitrevisions[7] の「Specifying Ranges」セクションを参照してください。 - [--] <path>…
-
指定されたパスに一致するファイルがどのようにして作成されたかを説明するのに十分なコミットのみを表示します。詳細およびその他の単純化モードについては、以下の「History Simplification」を参照してください。
混乱が生じる場合、パスはオプションまたはリビジョン範囲と区別するために
--
を前に付ける必要がある場合があります。
コミットの制限
説明で説明されている特殊な表記法を使用して、リストすべきコミットの範囲を指定する以外に、追加のコミット制限を適用できます。
特に明記されていない限り、より多くのオプションを使用すると、通常、出力はさらに制限されます (例: --since=
<date1> は <date1> よりも新しいコミットに制限し、これを --grep=
<pattern> と一緒に使用すると、ログメッセージに <pattern> に一致する行があるコミットにさらに制限されます)。
これらは、--reverse
などのコミット順序付けおよび書式設定オプションの前に適用されることに注意してください。
- -<number>
- -n <number>
- --max-count=<number>
-
出力するコミット数を制限します。
- --skip=<number>
-
コミット出力の表示を開始する前に、number コミットをスキップします。
- --since=<date>
- --after=<date>
-
特定の時刻よりも新しいコミットを表示します。
- --since-as-filter=<date>
-
特定の時刻よりも新しいすべてのコミットを表示します。これは、特定の時刻よりも古い最初のコミットで停止するのではなく、範囲内のすべてのコミットを訪れます。
- --until=<date>
- --before=<date>
-
特定の時刻よりも古いコミットを表示します。
- --author=<pattern>
- --committer=<pattern>
-
出力するコミットを、指定されたパターン (正規表現) に一致する author/committer ヘッダー行を持つものに限定します。複数の
--author=
<pattern> を使用する場合、指定されたパターンのいずれかに著者が一致するコミットが選択されます (複数の--committer=
<pattern> も同様です)。 - --grep-reflog=<pattern>
-
出力するコミットを、指定されたパターン (正規表現) に一致する reflog エントリを持つものに限定します。複数の
--grep-reflog
を使用する場合、指定されたパターンのいずれかに reflog メッセージが一致するコミットが選択されます。--walk-reflogs
が使用されていない限り、このオプションを使用するとエラーになります。 - --grep=<pattern>
-
出力するコミットを、指定されたパターン (正規表現) に一致するログメッセージを持つものに限定します。複数の
--grep=
<pattern> を使用する場合、指定されたパターンのいずれかにメッセージが一致するコミットが選択されます (ただし、--all-match
を参照)。--notes
が有効な場合、注釈からのメッセージはログメッセージの一部であるかのように一致します。 - --all-match
-
出力するコミットを、少なくとも1つの一致ではなく、指定されたすべての
--grep
に一致するものに限定します。 - --invert-grep
-
出力するコミットを、
--grep=
<pattern> で指定されたパターンに一致しないログメッセージを持つものに限定します。 - -i
- --regexp-ignore-case
-
大文字と小文字を区別せずに正規表現制限パターンに一致させます。
- --basic-regexp
-
制限パターンを基本正規表現とみなします。これがデフォルトです。
- -E
- --extended-regexp
-
制限パターンを、デフォルトの基本正規表現ではなく拡張正規表現とみなします。
- -F
- --fixed-strings
-
制限パターンを固定文字列とみなします (パターンを正規表現として解釈しません)。
- -P
- --perl-regexp
-
制限パターンを Perl 互換の正規表現とみなします。
これらのタイプの正規表現のサポートは、オプションのコンパイル時依存関係です。Git がそれらのサポートなしでコンパイルされた場合、このオプションを指定すると終了します。
- --remove-empty
-
与えられたパスがツリーから消えたときに停止します。
- --merges
-
マージコミットのみを出力します。これは
--min-parents=2
とまったく同じです。 - --no-merges
-
親が複数あるコミットを出力しません。これは
--max-parents=1
とまったく同じです。 - --min-parents=<number>
- --max-parents=<number>
- --no-min-parents
- --no-max-parents
-
指定された数の親コミットを少なくとも (または最大で) 持つコミットのみを表示します。特に、
--max-parents=1
は--no-merges
と同じであり、--min-parents=2
は--merges
と同じです。--max-parents=0
はすべてのルートコミットを示し、--min-parents=3
はすべてのオクトパスマージを示します。--no-min-parents
と--no-max-parents
はこれらの制限をリセットします (制限なしに)。同等の形式は--min-parents=0
(任意のコミットは0以上の親を持つ) と--max-parents=-1
(負の数は上限なしを示す) です。 - --first-parent
-
含めるコミットを検索する際、マージコミットを見つけた場合、最初の親コミットのみをたどります。このオプションは、特定のトピックブランチの進化を閲覧する際により良い概要を提供できます。なぜなら、トピックブランチへのマージは、しばしば更新されたアップストリームに時々調整することのみを目的としており、このオプションを使用すると、そのようなマージによって履歴に持ち込まれた個々のコミットを無視できるからです。
このオプションは、マージコミットのデフォルトの差分形式を
first-parent
にも変更します。詳細については--diff-merges=first-parent
を参照してください。 - --exclude-first-parent-only
-
除外するコミットを見つける際 (^ を使用して)、マージコミットを見つけた場合、最初の親コミットのみをたどります。これは、任意の merges が有効なトピックブランチの変更であると仮定して、リモートブランチから分岐した時点からのトピックブランチの変更のセットを見つけるために使用できます。
- --not
-
すべての後続のリビジョン指定子について、^ プレフィックス (またはその欠如) の意味を、次の
--not
まで反転させます。コマンドラインで --stdin の前に使用された場合、stdin を通じて渡されたリビジョンは影響を受けません。逆に、標準入力経由で渡された場合、コマンドラインで渡されたリビジョンは影響を受けません。 - --all
-
refs/
内のすべての参照とHEAD
が、コマンドラインで <commit> としてリストされているかのように振る舞います。 - --branches[=<pattern>]
-
refs/heads
内のすべての参照が、コマンドラインで <commit> としてリストされているかのように振る舞います。<pattern> が与えられた場合、指定されたシェル glob に一致するブランチに限定します。パターンに ?、*、または [ がない場合、末尾に /* が暗黙的に追加されます。 - --tags[=<pattern>]
-
refs/tags
内のすべての参照が、コマンドラインで <commit> としてリストされているかのように振る舞います。<pattern> が与えられた場合、指定されたシェル glob に一致するタグに限定します。パターンに ?、*、または [ がない場合、末尾に /* が暗黙的に追加されます。 - --remotes[=<pattern>]
-
refs/remotes
内のすべての参照が、コマンドラインで <commit> としてリストされているかのように振る舞います。<pattern> が与えられた場合、指定されたシェル glob に一致するリモート追跡ブランチに限定します。パターンに ?、*、または [ がない場合、末尾に /* が暗黙的に追加されます。 - --glob=<glob-pattern>
-
シェル glob <glob-pattern> に一致するすべての参照が、コマンドラインで <commit> としてリストされているかのように振る舞います。先頭の refs/ がない場合、自動的に追加されます。パターンに ?、*、または [ がない場合、末尾に /* が暗黙的に追加されます。
- --exclude=<glob-pattern>
-
次に続く
--all
、--branches
、--tags
、--remotes
、または--glob
が考慮するはずの <glob-pattern> に一致する参照を含めません。このオプションの繰り返しは、次の--all
、--branches
、--tags
、--remotes
、または--glob
オプションまで除外パターンを累積します (他のオプションや引数は累積されたパターンをクリアしません)。与えられたパターンは、それぞれ
--branches
、--tags
、または--remotes
に適用される場合、refs/heads
、refs/tags
、またはrefs/remotes
で始まってはならず、--glob
または--all
に適用される場合、refs/
で始まらなければなりません。末尾の /* が意図されている場合、明示的に指定する必要があります。 -
git-fetch
、git-receive-pack
、またはgit-upload-pack
によって非表示にされる参照を、適切なfetch.hideRefs
、receive.hideRefs
、またはuploadpack.hideRefs
設定 (およびtransfer.hideRefs
も参照) を参照して含めません (git-config[1] を参照)。このオプションは、次の疑似参照オプション--all
または--glob
に影響し、それらを処理した後クリアされます。 - --reflog
-
reflogs で言及されているすべてのオブジェクトが、コマンドラインで <commit> としてリストされているかのように振る舞います。
- --alternate-refs
-
代替リポジトリの参照チップとして言及されているすべてのオブジェクトがコマンドラインでリストされているかのように振る舞います。代替リポジトリとは、オブジェクトディレクトリが
objects/info/alternates
に指定されているすべてのリポジトリです。含まれるオブジェクトのセットは、core.alternateRefsCommand
などによって変更される場合があります。git-config[1] を参照してください。 - --single-worktree
-
デフォルトでは、複数の作業ツリーがある場合 (git-worktree[1] を参照)、次のオプションはすべての作業ツリーを検査します:
--all
、--reflog
、および--indexed-objects
。このオプションは、現在の作業ツリーのみを検査するように強制します。 - --ignore-missing
-
入力に無効なオブジェクト名が見つかった場合、その無効な入力が与えられなかったかのように振る舞います。
- --bisect
-
悪いバイセクション参照
refs/bisect/bad
がリストされており、その後に--not
と良いバイセクション参照refs/bisect/good-*
がコマンドラインにリストされているかのように振る舞います。 - --stdin
-
コマンドラインから引数を受け取るだけでなく、標準入力からも読み取ります。これは、コミットや
--all
や--glob=
のような疑似オプションを受け入れます。--
区切り記号が見つかった場合、続く入力はパスとして扱われ、結果を制限するために使用されます。標準入力経由で読み取られる--not
のようなフラグは、同じ方法で渡された引数にのみ尊重され、後続のコマンドライン引数には影響しません。 - --cherry-mark
-
--cherry-pick
(以下参照) のように、等価なコミットを省略するのではなく=
でマークし、不等価なコミットを+
でマークします。 - --cherry-pick
-
コミットのセットが対称差で制限されている場合、別のコミットと同じ変更を導入するコミットを「反対側」から省略します。
たとえば、2つのブランチ
A
とB
がある場合、それらのいずれかの側にあるすべてのコミットをリストする通常の方法は--left-right
です (--left-right
オプションの説明の以下の例を参照)。ただし、これは他のブランチからチェリーピックされたコミットを表示します (たとえば、「3rd on b」はブランチ A からチェリーピックされた可能性があります)。このオプションを使用すると、このようなコミットのペアは出力から除外されます。 - --left-only
- --right-only
-
対称差のそれぞれの側にあるコミットのみをリストします。つまり、
--left-right
によって < または > とマークされるコミットのみです。例えば、
--cherry-pick
--right-only
A...B
は、A
にある、またはA
のコミットとパッチ的に等価なコミットをB
から除外します。言い換えれば、これはgit
cherry
A
B
からの+
コミットをリストします。より正確には、--cherry-pick
--right-only
--no-merges
が正確なリストを与えます。 - --cherry
-
--right-only
--cherry-mark
--no-merges
の同義語です。フォークした履歴の反対側に適用されたコミットをマークして、私たちの側のコミットに限定するのに役立ちます。git
log
--cherry
upstream...mybranch
はgit
cherry
upstream
mybranch
と同様です。 - -g
- --walk-reflogs
-
コミットの祖先チェーンをたどるのではなく、最新の reflog エントリから古いものへと reflog エントリをたどります。このオプションを使用する場合、除外するコミットを指定することはできません (つまり、^commit、commit1..commit2、および commit1...commit2 の表記は使用できません)。
oneline
およびreference
(明らかな理由により) 以外の--pretty
形式の場合、これにより reflog から取得された2行の追加情報が出力に含まれます。出力の reflog 指示子は、いくつかのルールに応じて、ref@{
<Nth>}
(<Nth> は reflog 内の逆時系列インデックス) またはref@{
<timestamp>}
(そのエントリの <timestamp> 付き) として表示される場合があります。-
開始点が
ref@{
<Nth>}
として指定されている場合、インデックス形式を表示します。 -
開始点が
ref@{now}
として指定された場合、タイムスタンプ形式を表示します。 -
どちらも使用されなかったが、コマンドラインで
--date
が指定された場合、--date
で要求された形式でタイムスタンプを表示します。 -
それ以外の場合、インデックス形式を表示します。
--pretty=oneline
の場合、コミットメッセージは同じ行にこの情報がプレフィックスされます。このオプションは--reverse
と組み合わせることはできません。git-reflog[1] も参照してください。--pretty=reference
の場合、この情報はまったく表示されません。 -
- --merge
-
HEAD...
<other> の範囲で競合するパスに触れるコミットを表示します。ここで <other> はMERGE_HEAD
、CHERRY_PICK_HEAD
、REVERT_HEAD
、またはREBASE_HEAD
に存在する最初の疑似参照です。インデックスに未マージのエントリがある場合にのみ機能します。このオプションは、3方向マージから競合を解決する際に、関連するコミットを表示するために使用できます。 - --boundary
-
除外された境界コミットを出力します。境界コミットには
-
がプレフィックスされます。
履歴の簡素化
特定の <path> を変更するコミットなど、履歴の一部のみに関心がある場合があります。しかし、「履歴の簡素化」には2つの部分があり、1つはコミットを選択すること、もう1つはそれをどのように行うかであり、履歴を簡素化するためのさまざまな戦略があります。
次のオプションは、表示するコミットを選択します。
意味のある履歴を提供するために、追加のコミットが表示される場合があることに注意してください。
以下のオプションは、簡素化の実行方法に影響します。
- デフォルトモード
-
ツリーの最終状態を説明する最も単純な履歴に履歴を簡素化します。最も単純とは、最終結果が同じである場合 (つまり、同じ内容のブランチをマージする場合) に一部のサイドブランチをプルーニングするためです。
- --show-pulls
-
デフォルトモードからのすべてのコミットを含めるだけでなく、最初の親と TREESAME ではないが後の親と TREESAME であるすべてのマージコミットも含む。このモードは、ブランチに「最初に変更を導入した」マージコミットを表示するのに役立ちます。
- --full-history
-
デフォルトモードと同じですが、一部の履歴をプルーニングしません。
- --dense
-
選択されたコミットのみを表示し、意味のある履歴のためにいくつか追加します。
- --sparse
-
簡素化された履歴内のすべてのコミットが表示されます。
- --simplify-merges
-
結果の履歴から不要なマージをいくつか削除する
--full-history
の追加オプション。このマージに貢献する選択されたコミットがないため。 - --ancestry-path[=<commit>]
-
表示するコミットの範囲 (例: commit1..commit2 または commit2 ^commit1) と、その範囲内のコミット <commit> が与えられた場合、その範囲内で <commit> の祖先であるコミット、<commit> の子孫であるコミット、または <commit> 自身であるコミットのみを表示します。コミットが指定されていない場合、commit1 (範囲の除外部分) を <commit> として使用します。複数回渡すことができます。その場合、コミットは、与えられたコミットのいずれかである場合、またはそれらのいずれかの祖先または子孫である場合に含められます。
より詳細な説明を以下に示します。
<paths> として foo
を指定したとします。foo
を変更するコミットを !TREESAME と呼び、残りを TREESAME と呼びます。( foo
でフィルタリングされた差分では、それらはそれぞれ異なって見え、等しく見えます。)
以下では、単純化設定の違いを説明するために常に同じ例の履歴を参照します。このコミットグラフでファイル foo
をフィルタリングしていると仮定します。
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
履歴 A---Q の水平線は、各マージの最初の親であると見なされます。コミットは
-
I
は最初のコミットで、foo
は「asdf」という内容で存在し、ファイルquux
は「quux」という内容で存在します。最初のコミットは空のツリーと比較されるため、I
は !TREESAME です。 -
A
では、foo
は「foo」のみを含みます。 -
B
はA
と同じ変更を含みます。そのマージM
は自明であり、したがってすべての親に対して TREESAME です。 -
C
はfoo
を変更しませんが、そのマージN
はそれを「foobar」に変更するため、どの親とも TREESAME ではありません。 -
D
はfoo
を「baz」に設定します。そのマージO
はN
とD
の文字列を組み合わせて「foobarbaz」にします。つまり、どの親とも TREESAME ではありません。 -
E
はquux
を「xyzzy」に変更し、そのマージP
は文字列を「quux xyzzy」に結合します。P
はO
に対して TREESAME ですが、E
に対してはそうではありません。 -
X
は新しいファイルside
を追加した独立したルートコミットであり、Y
はそれを変更しました。Y
はX
に対して TREESAME です。そのマージQ
はside
をP
に追加し、Q
はP
に対して TREESAME ですが、Y
に対してはそうではありません。
rev-list
は、--full-history
および/または親の書き換え ( --parents
または --children
を介して) が使用されるかどうかに基づいて、コミットを含めるか除外するかを決定しながら履歴を逆方向にウォークします。以下の設定が利用可能です。
- デフォルトモード
-
コミットは、どの親とも TREESAME でない場合に含められます (ただし、これは変更可能です。以下の
--sparse
を参照)。コミットがマージであり、1つの親と TREESAME であった場合、その親のみをたどります。(複数の TREESAME 親がある場合でも、そのうちの1つだけをたどります。) それ以外の場合、すべての親をたどります。これにより、
.-A---N---O / / / I---------D
TREESAME 親が利用可能な場合はその親のみをたどるというルールによって、
B
が考慮から完全に除外されたことに注意してください。C
はN
を介して考慮されましたが、TREESAME です。ルートコミットは空のツリーと比較されるため、I
は !TREESAME です。親/子関係は
--parents
でのみ表示されますが、これはデフォルトモードで選択されたコミットには影響しないため、親ラインを表示しました。 - --full-history (親の書き換えなし)
-
このモードはデフォルトとは1点異なります。マージが親の1つと TREESAME であっても、常にすべての親をたどります。マージの複数の側面に含まれるコミットがある場合でも、マージ自体が含まれることを意味しません!例では、次のようになります。
I A B N D O P Q
M
は両方の親に対して TREESAME であるため除外されました。E
、C
、B
はすべてウォークされましたが、!TREESAME だったのはB
だけであったため、他は表示されません。親の書き換えなしでは、コミット間の親子関係について話すことは実際には不可能であるため、それらを切断して表示しています。
- --full-history (親の書き換えあり)
-
通常のコミットは、!TREESAME である場合にのみ含まれます (ただし、これは変更可能です。以下の
--sparse
を参照)。マージは常に含まれます。ただし、その親リストは書き換えられます。各親に沿って、それ自体に含まれていないコミットをプルーニングします。これにより、
.-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------'
上記の書き換えなしの
--full-history
と比較してください。E
は TREESAME であるためプルーニングされましたが、P の親リストはE
の親I
を含むように書き換えられました。同じことがC
とN
、およびX
、Y
とQ
についても起こりました。
上記の設定に加えて、TREESAME が包含に影響するかどうかを変更できます。
- --dense
-
ウォークされたコミットは、どの親とも TREESAME でない場合に含められます。
- --sparse
-
ウォークされたすべてのコミットが含まれます。
--full-history
がないと、これはマージを単純化することに注意してください。親の1つが TREESAME であれば、その親のみをたどるため、マージの他の側面は決してウォークされません。 - --simplify-merges
-
まず、親の書き換えありの
--full-history
と同じ方法で履歴グラフを構築します (上記参照)。次に、各コミット
C
を、次のルールに従って最終履歴のその置換C'
に単純化します。-
C'
をC
に設定します。 -
C'
の各親P
をその単純化されたP'
に置き換えます。この過程で、他の親の祖先である親、または空のツリーに対して TREESAME であるルートコミットを削除し、重複を削除しますが、TREESAME であるすべての親を削除しないように注意してください。 -
この親の書き換え後、
C'
がルートまたはマージコミット (親が0または1より多い)、境界コミット、または !TREESAME である場合、それは残ります。それ以外の場合、それはその唯一の親に置き換えられます。
その効果は、親の書き換えありの
--full-history
と比較することで最もよく示されます。例は次のようになります。.-A---M---N---O / / / I B D \ / / `---------'
--full-history
と比較して、N
、P
、およびQ
の主要な違いに注目してください。-
N
の親リストは、他の親M
の祖先であるため、I
が削除されました。それでも、N
は !TREESAME であるため残りました。 -
P
の親リストも同様にI
が削除されました。P
は親が1つで TREESAME であるため、完全に削除されました。 -
Q
の親リストはY
がX
に単純化されました。X
は TREESAME ルートであったため削除されました。Q
は親が1つで TREESAME であるため、完全に削除されました。
-
他にも利用可能な簡素化モードがあります。
- --ancestry-path[=<commit>]
-
表示されるコミットを、<commit> の祖先であるか、<commit> の子孫であるか、または <commit> 自身であるものに限定します。
使用例として、次のコミット履歴を考えてみましょう。
D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M
通常の D..M は、
M
の祖先であるコミットのセットを計算しますが、D
の祖先であるコミットは除外します。これは、「M
にはD
にはなかった何があるか」という意味で、D
以降のM
に至る履歴で何が起こったかを確認するのに役立ちます。この例の結果は、A
とB
(もちろんD
自身も) を除くすべてのコミットになります。しかし、
D
によって導入されたバグによって汚染され、修正が必要なM
のコミットを見つけたい場合、D..M の中で実際にD
の子孫であるサブセットのみを表示したい場合があります。つまり、C
とK
を除外したい場合があります。これは--ancestry-path
オプションが行うこととまったく同じです。D..M 範囲に適用すると、次のようになります。E-------F \ \ G---H---I---J \ L--M
D..M 範囲に適用した場合、
--ancestry-path
と同じ意味ですが、より明示的である--ancestry-path=D
を代わりに使用することもできます。この範囲内の特定のトピックに関心があり、そのトピックによって影響を受けるすべてのコミットに関心がある場合は、そのトピックを祖先パスに含む
D..M
のサブセットのみを表示したい場合があります。したがって、たとえば--ancestry-path=H
D..M
を使用すると、次のようになります。E \ C---G---H---I---J \ L--M
一方、
--ancestry-path=K
D..M
の結果は次のようになります。K---------------L--M
別のオプションである --show-pulls
を議論する前に、新しい履歴例を作成する必要があります。
ユーザーが単純化された履歴を見たときに直面する一般的な問題は、ファイルが何らかの形で変更されたことを知っているコミットが、ファイルの単純化された履歴に表示されないことです。新しい例を示し、その場合 --full-history
や --simplify-merges
などのオプションがどのように機能するかを示しましょう。
.-A---M-----C--N---O---P / / \ \ \/ / / I B \ R-'`-Z' / \ / \/ / \ / /\ / `---X--' `---Y--'
この例では、I
が file.txt
を作成し、それが A
、B
、X
によって異なる方法で変更されたとします。単一親コミット C
、Z
、Y
は file.txt
を変更しません。マージコミット M
は、マージ競合を解決して A
と B
の両方の変更を含めることによって作成されたため、どちらとも TREESAME ではありません。しかし、マージコミット R
は、M
の file.txt
の内容を無視し、X
の file.txt
の内容のみを取ることによって作成されました。したがって、R
は X
に対して TREESAME ですが、M
に対してはそうではありません。最後に、N
を作成するための自然なマージ解決は、R
の file.txt
の内容を取ることであるため、N
は R
に対して TREESAME ですが、C
に対してはそうではありません。マージコミット O
と P
は、それぞれ最初の親に対して TREESAME ですが、2番目の親である Z
と Y
に対してはそうではありません。
デフォルトモードを使用すると、N
と R
の両方に TREESAME な親があるため、それらのエッジはウォークされ、他は無視されます。結果の履歴グラフは次のようになります。
I---X
--full-history
を使用すると、Git はすべてのエッジをウォークします。これにより、コミット A
と B
およびマージ M
が検出されますが、マージコミット O
と P
も明らかになります。親の書き換えを使用すると、結果のグラフは次のようになります。
.-A---M--------N---O---P / / \ \ \/ / / I B \ R-'`--' / \ / \/ / \ / /\ / `---X--' `------'
ここでは、マージコミット O
と P
は、実際には file.txt
への変更に貢献していないため、余分なノイズを与えます。これらは、古いバージョンの file.txt
に基づいたトピックをマージしただけです。これは、多くのコントリビューターが並行して作業し、単一のトランクにトピックブランチをマージするワークフローを使用するリポジトリでよくある問題です。--full-history
の結果に多くの無関係なマージが表示されます。
--simplify-merges
オプションを使用すると、コミット O
と P
は結果から消えます。これは、O
と P
の書き換えられた2番目の親が最初の親から到達可能であるためです。これらのエッジは削除され、コミットは親に対して TREESAME である単一親コミットのように見えます。これはコミット N
にも発生し、次のような履歴ビューになります。
.-A---M--. / / \ I B R \ / / \ / / `---X--'
このビューでは、A
、B
、X
からのすべての重要な単一親変更が表示されます。また、慎重に解決されたマージ M
と、それほど慎重に解決されなかったマージ R
も表示されます。これは通常、デフォルトビューでコミット A
と B
が履歴から「消えた」理由を判断するのに十分な情報です。ただし、このアプローチにはいくつかの問題があります。
最初の問題はパフォーマンスです。以前のどのオプションとも異なり、--simplify-merges
オプションは、単一の結果を返す前にコミット履歴全体をウォークする必要があります。これは、非常に大きなリポジトリではオプションの使用を困難にする可能性があります。
2番目の問題は監査に関するものです。多くのコントリビューターが同じリポジトリで作業している場合、どのマージコミットが重要なブランチに変更を導入したかが重要です。上記の問題のあるマージ R
は、重要なブランチにマージするために使用されたマージコミットである可能性は低いです。代わりに、マージ N
が R
と X
を重要なブランチにマージするために使用されました。このコミットには、変更 X
が A
と B
からの変更をオーバーライドするようになった理由に関する情報がコミットメッセージに含まれている場合があります。
- --show-pulls
-
デフォルトの履歴に表示されるコミットに加えて、最初の親と TREESAME ではないが後の親と TREESAME である各マージコミットを表示します。
マージコミットが
--show-pulls
によって含まれる場合、そのマージは別のブランチから変更を「プル」したかのように扱われます。この例で--show-pulls
を使用した場合 (他のオプションなし)、結果のグラフは次のようになります。I---X---R---N
ここでは、マージコミット
R
とN
が、それぞれコミットX
とR
をベースブランチに「プル」したため含まれています。これらのマージが、デフォルト履歴にコミットA
とB
が表示されない理由です。--show-pulls
と--simplify-merges
を組み合わせると、グラフには必要な情報がすべて含まれます。.-A---M--. N / / \ / I B R \ / / \ / / `---X--'
M
がR
から到達可能であるため、N
からM
へのエッジは単純化されて削除されたことに注意してください。しかし、N
はメインブランチにR
の変更を「プル」したため、重要なコミットとして履歴に表示されます。
--simplify-by-decoration
オプションを使用すると、タグによって参照されていないコミットを省略することで、履歴のトポロジの全体像のみを表示できます。コミットは、(1) タグによって参照されているか、(2) コマンドラインで指定されたパスの内容を変更する場合に、!TREESAME (つまり、上記の履歴簡素化ルール後に保持される) とマークされます。その他のすべてのコミットは TREESAME とマークされます (単純化される対象となります)。
コミットの順序付け
デフォルトでは、コミットは逆時系列順に表示されます。
- --date-order
-
すべての子供が表示されるまで親を表示しないが、それ以外の場合はコミットのタイムスタンプ順にコミットを表示します。
- --author-date-order
-
すべての子供が表示されるまで親を表示しないが、それ以外の場合はコミットの作成者タイムスタンプ順にコミットを表示します。
- --topo-order
-
すべての子供が表示されるまで親を表示せず、複数の履歴ラインのコミットが混ざって表示されるのを避けます。
たとえば、このようなコミット履歴では、
---1----2----4----7 \ \ 3----5----6----8---
ここで数字はコミットのタイムスタンプ順を表し、
git
rev-list
と--date-order
を使用するコマンドは、タイムスタンプ順にコミットを表示します: 8 7 6 5 4 3 2 1。--topo-order
を使用すると、8 6 5 3 7 4 2 1 (または 8 7 4 2 6 5 3 1) と表示されます。これは、2つの並行開発トラックからのコミットが混ざって表示されるのを避けるために、古いコミットが新しいコミットの前に表示される場合があります。 - --reverse
-
表示されるように選択されたコミット (上記のコミット制限セクションを参照) を逆順で出力します。
--walk-reflogs
と組み合わせることはできません。
コミットの書式設定
- --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進コミットオブジェクト名を表示します。これは、
--abbrev-commit
(明示的または "--oneline" などの他のオプションによって暗示される場合) を無効にします。また、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スペースでインデントする整形形式 (つまり、デフォルトである medium、full、および 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
に署名を渡して確認し、その出力を表示します。 - --relative-date
-
--date=relative
の同義語。 - --date=<format>
-
--pretty
を使用する場合など、人間が読める形式で表示される日付にのみ影響します。log.date
設定変数は、log コマンドの--date
オプションのデフォルト値を設定します。デフォルトでは、日付は元のタイムゾーン (コミッターまたは著者のいずれか) で表示されます。-local
が形式に追加された場合 (例:iso-local
)、代わりにユーザーのローカルタイムゾーンが使用されます。--date=relative
は、現在時刻に対する相対的な日付を表示します (例: 「2 hours ago」)。-local
オプションは--date=relative
には影響しません。--date=local
は--date=default-local
のエイリアスです。--date=iso
(または--date=iso8601
) は、ISO 8601 に似た形式でタイムスタンプを表示します。厳密な ISO 8601 形式との違いは次のとおりです。-
T
の日付/時刻区切り文字の代わりにスペース -
時刻とタイムゾーンの間のスペース
-
タイムゾーンの時と分の間にコロンがない
--date=iso-strict
(または--date=iso8601-strict
) は、厳密な ISO 8601 形式でタイムスタンプを表示します。--date=rfc
(または--date=rfc2822
) は、RFC 2822 形式でタイムスタンプを表示します。これは電子メールメッセージでよく見られます。--date=short
は、YYYY-MM-DD
形式で日付のみを表示し、時刻は表示しません。--date=raw
は、エポックからの秒数 (1970-01-01 00:00:00 UTC) を日付として表示し、その後にスペース、そして UTC からのオフセット (プラスまたはマイナスの4桁。最初の2桁が時、次の2桁が分) としてタイムゾーンを表示します。つまり、タイムスタンプがstrftime
("%s
%z"
) でフォーマットされたかのように表示されます。-local
オプションはエポックからの秒数 (常に UTC で測定されます) には影響しませんが、付属のタイムゾーン値を切り替えます。--date=human
は、タイムゾーンが現在のタイムゾーンと一致しない場合にタイムゾーンを表示し、一致する場合は全体の日付を省略します (つまり、「今年」の年の日付は年を省略し、過去数日以内の場合は曜日を言うだけで全体の日付を省略します)。古い日付の場合、時と分も省略されます。--date=unix
は、日付を Unix エポックタイムスタンプ (1970年からの秒数) として表示します。--raw
と同様に、これは常に UTC であり、したがって-local
は影響しません。--date=format:...
は、... をシステムstrftime
に渡します。ただし、%s、%z、および %Z は内部で処理されます。--date=format:%c
を使用して、システムロケールの優先形式で日付を表示します。書式指定子の完全なリストについては、strftime
マニュアルを参照してください。-local
を使用する場合、正しい構文は--date=format-local:...
です。--date=default
はデフォルトの形式であり、ctime(3) の出力に基づいています。3文字の曜日、3文字の月、日付、"HH:MM:SS" 形式の時-分-秒、その後に4桁の年、そしてタイムゾーン情報が1行で表示されます。ただし、ローカルタイムゾーンが使用される場合はその限りではありません (例:Thu
Jan
1
00:00:00
1970
+0000
)。 -
- --parents
-
コミットの親も出力します (「commit parent…」の形式)。親の書き換えも有効になります。上記の「History Simplification」を参照してください。
- --children
-
コミットの子も出力します (「commit child…」の形式)。親の書き換えも有効になります。上記の「History Simplification」を参照してください。
- --left-right
-
対称差分のどちら側からコミットに到達可能かをマークします。左側のコミットには < が、右側のコミットには > がプレフィックスされます。
--boundary
と組み合わせると、これらのコミットには-
がプレフィックスされます。たとえば、次のようなトポロジの場合、
y---b---b branch B / \ / / . / / \ o---x---a---a branch A
次のような出力が得られます。
$ git rev-list --left-right --boundary --pretty=oneline A...B >bbbbbbb... 3rd on b >bbbbbbb... 2nd on b <aaaaaaa... 3rd on a <aaaaaaa... 2nd on a -yyyyyyy... 1st on b -xxxxxxx... 1st on a
- --graph
-
出力の左側に、コミット履歴のテキストベースのグラフィカル表現を描画します。これにより、グラフ履歴が適切に描画されるように、コミット間に余分な行が印刷される場合があります。
--no-walk
と組み合わせることはできません。これにより親の書き換えが有効になります。上記の「History Simplification」を参照してください。
これはデフォルトで
--topo-order
オプションを意味しますが、--date-order
オプションも指定できます。 - --show-linear-break[=<barrier>]
-
--graph を使用しない場合、すべての履歴ブランチがフラット化され、2 つの連続するコミットが線形ブランチに属していないことを把握しにくくなります。このオプションは、その場合にそれらの間にバリアを挿入します。<barrier> が指定されている場合、それはデフォルトの文字列の代わりに表示される文字列です。
PRETTY FORMATS
コミットがマージであり、pretty-format が 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 情報は、graft や履歴の単純化を考慮せずに、真の親コミットを表示します。このフォーマットはコミットの表示方法に影響しますが、たとえば
git
log
--raw
のように diff の表示方法には影響しないことに注意してください。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.<<
プレースホルダーは次のとおりです
-
単一のリテラル文字に展開されるプレースホルダー
-
その後のプレースホルダのフォーマットに影響するプレースホルダ
- %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
文字列の後にコロンとゼロ個以上のカンマ区切りのオプションを続けることができます。オプション値にはリテラルフォーマットコードを含めることができます。これらは、オプション構文での役割のため、カンマ (%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) を使用する代わりに、<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
-
参照ログセレクタ、例:
refs/stash@{1}
またはrefs/stash@{2
minutes
ago}
。形式は-g
オプションで説明されているルールに従います。@
より前の部分はコマンドラインで与えられた参照名です (したがってgit
log
-g
refs/heads/master
はrefs/heads/master@{0}
を生成します)。 - %gd
-
短縮された参照ログセレクタ。
%gD
と同じですが、人間が読みやすいように参照名部分が短縮されます (したがって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
文字列の後にコロンとゼロ個以上のカンマ区切りのオプションを続けることができます。複数のオプションが指定された場合、最後に指定されたオプションが優先されます。-
key=<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* リフロッグオプションは、リフロッグエントリを巡回している場合 (例: 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
log
は diff 出力を生成しません。以下のオプションを使用して、各コミットによって行われた変更を表示できます。
--diff-merges
バリアント (短い -m
、-c
、--cc
、および --dd
オプションを含む) のいずれかが明示的に指定されていない限り、マージコミットは diff を表示せず、--patch
のような diff フォーマットが選択されていても、-S
のような検索オプションには一致しないことに注意してください。例外は --first-parent
が使用されている場合で、その場合 first-parent
がマージコミットのデフォルトフォーマットです。
-p
-u
--patch
-
パッチを生成します (Generating patch text with -p を参照)。
-s
--no-patch
-
diff 機構からのすべての出力を抑制します。デフォルトでパッチを表示する
git
show
のようなコマンドの出力を抑制したり、エイリアスでコマンドライン上の早い段階で--patch
、--stat
などのオプションの効果を打ち消したりするのに便利です。 - -m
-
マージコミットの diff をデフォルト形式で表示します。
--diff-merges=on
と似ていますが、-p
も指定されない限り-m
は出力を生成しません。 - -c
-
マージコミットに対して結合された diff 出力を生成します。
--diff-merges=combined
-p
のショートカットです。 - --cc
-
マージコミットの密な結合 diff 出力を生成します。
--diff-merges=dense-combined
-p
のショートカットです。 - --dd
-
マージコミットと通常のコミットの両方に対して、最初の親に対する diff を生成します。
--diff-merges=first-parent
-p
のショートカットです。 - --remerge-diff
-
マージコミットの remerge-diff 出力を生成します。
--diff-merges=remerge
-p
のショートカットです。 - --no-diff-merges
-
--diff-merges=off
の同義語。 - --diff-merges=<format>
-
マージコミットに使用される diff 形式を指定します。デフォルトは `off` ですが、
--first-parent
が使用されている場合はfirst-parent
がデフォルトになります。以下の形式がサポートされています
- off, none
-
マージコミットの diff 出力を無効にします。暗黙の値を上書きするのに便利です。
- on, m
-
マージコミットの diff 出力をデフォルト形式で表示します。デフォルト形式は
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 (マージコミットに使用される) が、すべての親からのファイル名をリストするようにします。したがって、これは
--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
-
各コミットについて、raw diff 形式を使用して変更の概要を表示します。 git-diff[1] の「RAW OUTPUT FORMAT」セクションを参照してください。これは、
--format=raw
で実現できる、ログ自体を raw 形式で表示することとは異なります。 --patch-with-raw
-
-p
--raw
の同義語。 -t
-
diff 出力にツリーオブジェクトを表示します。
--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 アルゴリズムを選択します。バリアントは以下の通りです
たとえば、
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
) などの拡張ヘッダ情報の凝縮された概要を diffstat で出力します。情報はファイル名部分とグラフ部分の間に配置されます。--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>]-
色付き diff を表示します。
--color
(つまり=
<when> なし) は--color=always
と同じです。<when> はalways
、never
、またはauto
のいずれかです。 --no-color
-
カラー差分をオフにします。
--color=never
と同じです。 --color-moved
[=
<mode>]-
移動したコード行は異なる色で表示されます。オプションが与えられない場合、<mode> はデフォルトで
no
になり、モードなしでオプションが与えられた場合、<mode> はデフォルトでzebra
になります。モードは以下のいずれかである必要があります。no
-
移動した行はハイライトされません。
default
-
zebra
の同義語です。これは将来、より sensible なモードに変更される可能性があります。 plain
-
ある場所で追加され、別の場所で削除された行は、
color.diff.newMoved
で色付けされます。同様に、diff の別の場所で追加された削除行には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
であり、以下のいずれかである必要があります。最初のモード名にもかかわらず、有効な場合、すべてのモードで変更された部分をハイライトするために色が使用されることに注意してください。
--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> 16 進数字長の最短プレフィックスを表示します。diff-patch 出力形式では、
--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
の差分は出力しません。結果のパッチは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
) されたファイルのみを選択します。フィルター文字の任意の組み合わせ (なしを含む) を使用できます。*
(すべてまたはなし) が組み合わせに追加されると、比較で他の基準に一致するファイルがある場合、すべてのパスが選択されます。他の基準に一致するファイルがない場合、何も選択されません。また、これらの大文字は小文字にすることで除外できます。例:
--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]の「カスタムハンクヘッダーの定義」を参照)。 --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]またはdiff plumbingコマンドでは有効になっていません。
--ignore-submodules
[=
(none
|untracked
|dirty
|all
)]-
diff 生成時にサブモジュールの変更を無視します。
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.noprefix
、diff.srcPrefix
、diff.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 によるパッチテキストの生成
-p
オプションを指定して、git-diff[1]、git-log[1]、git-show[1]、git-diff-index[1]、git-diff-tree[1]、またはgit-diff-files[1]を実行すると、パッチテキストが生成されます。パッチテキストの作成は、GIT_EXTERNAL_DIFF
およびGIT_DIFF_OPTS
環境変数(git[1]を参照)、およびdiff
属性(gitattributes[5]を参照)を介してカスタマイズできます。
-p
オプションが生成するものは、従来のdiff形式とは少し異なります。
-
以下のような"git diff"ヘッダーが前に付きます
diff --git a/file1 b/file2
a/
とb/
のファイル名は、リネーム/コピーが関与しない限り同じです。特に、作成または削除の場合でも、/dev/null
はa/
またはb/
のファイル名の代わりには使用されません。リネーム/コピーが関与する場合、
file1
とfile2
は、それぞれリネーム/コピーの元ファイルの名称と、リネーム/コピーによって生成されたファイルの名称を示します。 -
その後に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%の非類似度は古いファイルから新しいファイルに1行も持ち込まれなかったことを意味します。
インデックス行には、変更前と変更後のブロブオブジェクト名が含まれます。ファイルモードが変更されない場合は<mode>が含まれます。そうでない場合は、個別の行で古いモードと新しいモードが示されます。
-
"特殊な"文字を含むパス名は、設定変数
core.quotePath
で説明されているように引用符で囲まれます(git-config[1]を参照)。 -
出力中のすべての
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
-
Hunkヘッダは、そのhunkが適用される関数の名前を示します。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5]の「カスタムhunkヘッダの定義」を参照してください。
統合diff形式
diffを生成するどのコマンドも、マージを表示する際に-c
または--cc
オプションを指定して統合diffを生成できます。これは、git-diff[1]またはgit-show[1]でマージを表示する際のデフォルトの形式です。また、これらのコマンドのいずれかに適切な--diff-merges
オプションを指定して、特定の形式でdiffの生成を強制できることにも注意してください。
"結合差分"形式は次のようになります
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);
-
-c
オプションが使用された場合、次のような「git diff」ヘッダーが前に付きます。diff --combined file
または、
--cc
オプションが使用された場合、次のようになります。diff --cc file
-
その後に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>の差分で機能するように設計されており、結合差分形式では使用されません。 -
その後に、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
この拡張形式は、名前変更またはコピー検出が有効な場合に、異なる親におけるファイルの元の名前を表示できるため便利です。
-
チャンクヘッダー形式は、誤って
patch
-p1
にフィードされるのを防ぐために変更されています。結合差分形式はマージコミットの変更をレビューするために作成されたものであり、適用されることを意図していませんでした。変更は、拡張indexヘッダーの変更と同様です。@@@ <from-file-range> <from-file-range> <to-file-range> @@@
結合差分形式のチャンクヘッダーには、(親の数 + 1)個の
@
文字があります。
-
(マイナス — AにはあるがBでは削除)、+
(プラス — AにはないがBに追加)、または"
"
(スペース — 変更なし)のプレフィックスを持つ単一の列で2つのファイルAとBを表示する従来のunified diff形式とは異なり、この形式は2つ以上のファイルfile1、file2、...と1つのファイルXを比較し、Xが各fileNとどのように異なるかを示します。Xの行がfileNとどのように異なるかを記録するために、各fileNの列が出力行の前に付けられます。
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
log
--no-merges
-
コミット履歴全体を表示しますが、マージはスキップします。
git
log
v2.6.12..
include/scsi
drivers/scsi
-
バージョンv2.6.12以降で、
include/scsi
またはdrivers/scsi
サブディレクトリ内のファイルを変更したすべてのコミットを表示します。 git
log
--since="2
weeks
ago"
--
gitk
-
ファイルgitkへの過去2週間の変更を表示します。
--
は、gitkという名前のブランチとの混同を避けるために必要です。 git
log
--name-status
release..test
-
"test"ブランチにはあるが、まだ"release"ブランチにはないコミットを、各コミットが変更するパスのリストとともに表示します。
git
log
--follow
builtin/rev-list.c
-
builtin/rev-list.c
を変更したコミットを表示します。ファイルに現在の名前が付けられる前に発生したコミットも含まれます。 git
log
--branches
--not
--remotes=origin
-
ローカルブランチのいずれかにはあるが、originのリモートトラッキングブランチのいずれかにはないすべてのコミットを表示します(originが持っていないあなた自身のもの)。
git
log
master
--not
--remotes=*/master
-
ローカルのmasterにはあるが、リモートリポジトリのmasterブランチにはないすべてのコミットを表示します。
git
log
-p
-m
--first-parent
-
変更差分を含む履歴を表示しますが、"メインブランチ"の視点からのみ、マージされたブランチからのコミットをスキップし、マージによって導入された変更の完全な差分を表示します。これは、単一の統合ブランチに留まりながら、すべてのトピックブランチをマージするという厳格なポリシーに従っている場合にのみ意味があります。
git
log
-L
/int
main/',/^}/:main.c
-
ファイル
main.c
の関数main
()が時間の経過とともにどのように進化したかを表示します。 git
log
-3
-
表示するコミット数を3に制限します。
考察
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はそれを禁止しません。ただし、いくつかの点に注意する必要があります。
-
git
commit
およびgit
commit-tree
は、指定されたコミットログメッセージが有効なUTF-8文字列に見えない場合、明示的にプロジェクトがレガシーエンコーディングを使用していると指定しない限り、警告を発します。これを指定する方法は、.git/config
ファイルに次のようにi18n.commitEncoding
を設定することです。[i18n] commitEncoding = ISO-8859-1
上記の設定で作成されたコミットオブジェクトは、
i18n.commitEncoding
の値をencoding
ヘッダーに記録します。これは、後でそれを見る他の人々を助けるためです。このヘッダーがない場合、コミットログメッセージはUTF-8でエンコードされていると見なされます。 -
git
log
、git
show
、git
blame
などは、コミットオブジェクトのencoding
ヘッダーを参照し、特に指定がない限り、ログメッセージをUTF-8に再コードしようとします。必要な出力エンコーディングは、.git/config
ファイルでi18n.logOutputEncoding
を使用して、次のように指定できます。[i18n] logOutputEncoding = ISO-8859-1
この設定変数が存在しない場合、代わりに
i18n.commitEncoding
の値が使用されます。
コミット時にコミットオブジェクトレベルでUTF-8を強制するためにコミットログメッセージを再コードしないことを意図的に選択したことに注意してください。これは、UTF-8への再コードは必ずしも可逆操作ではないためです。
設定
コア変数についてはgit-config[1]を、diff生成に関連する設定についてはgit-diff[1]を参照してください。
このセクションのこの行より上のすべての内容は、git-config[1] ドキュメントには含まれていません。以下の内容は、そちらにあるものと同じです。
- log.abbrevCommit
-
trueの場合、git-log[1]、git-show[1]、およびgit-whatchanged[1]は
--abbrev-commit
を仮定します。このオプションは--no-abbrev-commit
で上書きできます。 - log.date
-
logコマンドのデフォルトの日時モードを設定します。log.dateの値を設定することは、git logの
--date
オプションを使用することと同様です。詳細については、git-log[1]を参照してください。フォーマットが "auto:foo" に設定され、ページャーが使用されている場合、日付フォーマットには "foo" が使用されます。それ以外の場合は、"default" が使用されます。
- log.decorate
-
ログコマンドで表示されるコミットの参照名を出力します。shortが指定されている場合、参照名プレフィックスrefs/heads/、refs/tags/、refs/remotes/は出力されません。fullが指定されている場合、完全な参照名(プレフィックスを含む)が出力されます。autoが指定されている場合、出力が端末に向かう場合はshortが指定されたかのように参照名が表示され、それ以外の場合は参照名は表示されません。これは
git
log
の--decorate
オプションと同じです。 - log.initialDecorationSet
-
デフォルトでは、
git
log
は特定の既知のref名前空間の装飾のみを表示します。allが指定されている場合、すべてのrefを装飾として表示します。 - log.excludeDecoration
-
ログの装飾から指定されたパターンを除外します。これは
--decorate-refs-exclude
コマンドラインオプションと似ていますが、設定オプションは--decorate-refs
オプションで上書きできます。 - log.diffMerges
-
--diff-merges=on
が指定されたときに使用するdiff形式を設定します。詳細については、git-log[1]の--diff-merges
を参照してください。デフォルトはseparate
です。 - log.follow
-
true
の場合、単一の<path>が与えられたときにgit
log
は--follow
オプションが使用されたかのように動作します。これには--follow
と同じ制限があり、つまり複数のファイルを追跡するために使用できず、非線形履歴ではうまく機能しません。 - log.graphColors
-
git
log
--graph
で履歴線を描画するために使用できる、コンマで区切られた色のリスト。 - log.showRoot
-
trueの場合、最初のコミットは大きな作成イベントとして表示されます。これは空のツリーに対する差分と同じです。git-log[1]やgit-whatchanged[1]のような、通常ルートコミットを非表示にするツールも、これからは表示するようになります。デフォルトはtrueです。
- log.showSignature
-
trueの場合、git-log[1]、git-show[1]、およびgit-whatchanged[1]は
--show-signature
を仮定します。 - log.mailmap
-
trueの場合、git-log[1]、git-show[1]、およびgit-whatchanged[1]は
--use-mailmap
を仮定し、そうでない場合は--no-use-mailmap
を仮定します。デフォルトはtrueです。 notes.mergeStrategy
-
ノートの競合を解決する際に、デフォルトで選択するマージ戦略。必ず
manual
、ours
、theirs
、union
、またはcat_sort_uniq
のいずれかである必要があります。デフォルトはmanual
です。各戦略の詳細については、git-notes[1]の「NOTES MERGE STRATEGIES」セクションを参照してください。この設定は、git-notes[1] に
--strategy
オプションを渡すことで上書きできます。 notes.
<name>.mergeStrategy
-
refs/notes/
<name>へのノートのマージを行う際に選択するマージ戦略。これはより一般的なnotes.mergeStrategy
を上書きします。利用可能な戦略の詳細については、git-notes[1]の「NOTES MERGE STRATEGIES」セクションを参照してください。 notes.displayRef
-
git
log
ファミリーのコマンドでコミットメッセージを表示する際に、core.notesRef
またはGIT_NOTES_REF
で設定されたデフォルトセットに加えて、どの参照(グロブまたは複数回指定された場合は複数の参照)からノートを読み取るか。この設定は、環境変数
GIT_NOTES_DISPLAY_REF
で上書きできます。これはコロン区切りのリファレンスまたはグロブのリストである必要があります。存在しないリファレンスに対しては警告が発行されますが、どのリファレンスとも一致しないグロブは silently 無視されます。
この設定は、git-log[1]ファミリーのコマンドの
--no-notes
オプション、またはそれらのコマンドが受け付ける--notes=
<ref>オプションによって無効にできます。core.notesRef
の実効値(GIT_NOTES_REF
によって上書きされる場合があります)も、表示される参照のリストに暗黙的に追加されます。 notes.rewrite.
<command>-
<command>(現在のところ
amend
またはrebase
)でコミットを書き換える際、この変数がfalse
の場合、gitは元のコミットから書き換えられたコミットへノートをコピーしません。デフォルトはtrue
です。以下のnotes.rewriteRef
も参照してください。この設定は環境変数
GIT_NOTES_REWRITE_REF
で上書きできます。これはコロン区切りのリファレンスまたはグロブのリストである必要があります。 notes.rewriteMode
-
リライト中にノートをコピーするとき(
notes.rewrite.
<command>オプションを参照)、ターゲットコミットにすでにノートがある場合にどうするかを決定します。overwrite
、concatenate
、cat_sort_uniq
、またはignore
のいずれかである必要があります。デフォルトはconcatenate
です。この設定は、環境変数
GIT_NOTES_REWRITE_MODE
で上書きできます。 notes.rewriteRef
-
リライト中にノートをコピーする際、どの(完全修飾された)リファレンスのノートをコピーするかを指定します。グロブにすることも可能で、その場合、一致するすべてのリファレンスのノートがコピーされます。この設定を複数回指定することもできます。
デフォルト値はありません。ノートの書き換えを有効にするには、この変数を設定する必要があります。
refs/notes/commits
に設定すると、デフォルトのコミットノートの書き換えが有効になります。環境変数
GIT_NOTES_REWRITE_REF
で上書きできます。その形式の詳細については、上記のnotes.rewrite.
<command> を参照してください。
GIT
git[1]スイートの一部