セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット作成
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣例
- 日常のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
プラミングコマンド
-
2.49.0
2025-03-14
- 2.48.1 変更なし
-
2.48.0
2025-01-10
- 2.45.1 → 2.47.2 変更なし
-
2.45.0
2024-04-29
- 2.43.3 → 2.44.3 変更なし
-
2.43.2
2024-02-13
- 2.43.1 変更なし
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 変更なし
-
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.1 → 2.38.5 変更なし
-
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.1 → 2.25.5 変更なし
-
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.17.1 → 2.19.1 変更なし
-
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
リンクを辿って到達可能なコミットをリストアップしますが、^を前に付けて指定されたコミットから到達可能なコミットは除外します。出力はデフォルトで逆時系列順に表示されます。
これを集合演算と考えることができます。コマンドラインで与えられた任意のコミットから到達可能なコミットは1つの集合を形成し、その集合から^を付けて与えられた任意のコミットから到達可能なコミットが差し引かれます。残ったコミットがコマンドの出力として表示されます。他の様々なオプションやパスパラメータを使用して、結果をさらに絞り込むことができます。
したがって、以下のコマンドは
$ git rev-list foo bar ^baz
「fooまたはbarから到達可能だが、bazからは到達できないすべてのコミットをリストアップする」という意味になります。
特別な表記「<commit1>..<commit2>」は、「^<commit1> <commit2>」の略記として使用できます。例えば、以下のどちらも互換的に使用できます。
$ git rev-list origin..HEAD $ git rev-list HEAD ^origin
もう1つの特別な表記は「<commit1>…<commit2>」で、これはマージに役立ちます。結果として得られるコミットの集合は、2つのオペランド間の対称差です。以下の2つのコマンドは同等です。
$ git rev-list A B --not $(git merge-base --all A B) $ git rev-list A...B
rev-listは、コミットの祖先グラフを構築し、走査する機能を提供するため、Gitの不可欠なコマンドです。このため、git bisectやgit repackなど、さまざまなコマンドで使用できる多くのオプションがあります。
オプション
コミットの制限
説明で述べた特別な表記を使用してリストアップすべきコミットの範囲を指定するだけでなく、追加のコミット制限を適用することもできます。
特に明記されていない限り、より多くのオプションを使用すると通常、出力がさらに制限されます(例: --since=<date1>
は<date1>
より新しいコミットに制限し、--grep=<pattern>
と組み合わせると、ログメッセージに<pattern>
に一致する行があるコミットにさらに制限されます)。
これらは、--reverse
などのコミット順序付けおよびフォーマットオプションの前に適用されることに注意してください。
- -<number>
- -n <number>
- --max-count=<number>
-
出力するコミット数を制限します。
- --skip=<number>
-
コミットの出力を開始する前に、number個のコミットをスキップします。
- --since=<date>
- --after=<date>
-
特定の
date
より新しいコミットを表示します。 - --since-as-filter=<date>
-
特定の
date
より新しいすべてのコミットを表示します。これは、特定のdate
より古い最初のコミットで停止するのではなく、範囲内のすべてのコミットを訪れます。 - --until=<date>
- --before=<date>
-
特定の
date
より古いコミットを表示します。 - --max-age=<timestamp>
- --min-age=<timestamp>
-
コミットの出力を指定された時間範囲に制限します。
- --author=<pattern>
- --committer=<pattern>
-
コミットの出力を、指定されたパターン(正規表現)に一致する作者/コミッターヘッダー行を持つものに制限します。複数の
--author=<pattern>
が指定された場合、指定されたパターンのいずれかに作者が一致するコミットが選択されます(複数の--committer=<pattern>
についても同様)。 - --grep-reflog=<pattern>
-
コミットの出力を、指定されたパターン(正規表現)に一致するリフロッグエントリを持つものに制限します。複数の
--grep-reflog
が指定された場合、指定されたパターンのいずれかにリフロッグメッセージが一致するコミットが選択されます。このオプションは、--walk-reflogs
が使用されていない限り、使用するとエラーになります。 - --grep=<pattern>
-
コミットの出力を、指定されたパターン(正規表現)に一致するログメッセージを持つものに制限します。複数の
--grep=<pattern>
が指定された場合、メッセージが指定されたパターンのいずれかに一致するコミットが選択されます(ただし、--all-match
も参照)。 - --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
-
含めるコミットを見つける際、マージコミットに遭遇した場合、最初の親コミットのみを辿ります。このオプションは、特定のトピックブランチの進化を閲覧する際に、より良い概要を提供できます。なぜなら、トピックブランチへのマージは、時々更新されたアップストリームに適応することのみを目的とすることが多く、このオプションを使用すると、そのようなマージによって履歴に取り込まれた個々のコミットを無視できるためです。
- --exclude-first-parent-only
-
除外するコミットを見つける際(^を使用)、マージコミットに遭遇した場合、最初の親コミットのみを辿ります。これは、任意の種類のマージが有効なトピックブランチの変更となりうることを考慮すると、リモートブランチから分岐した時点からのトピックブランチ内の変更の集合を見つけるために使用できます。
- --not
-
続くすべてのリビジョン指定子に対して、^プレフィックスの意味(またはその欠如)を次の
--not
まで反転させます。コマンドラインで--stdinの前に使用した場合、標準入力経由で渡されたリビジョンは影響を受けません。逆に、標準入力経由で渡された場合、コマンドラインで渡されたリビジョンは影響を受けません。 - --all
-
refs/
内のすべての参照とHEAD
が、コマンドラインに<commit>としてリストアップされているかのように扱います。 - --branches[=<pattern>]
-
refs/heads
内のすべての参照が、コマンドラインに<commit>としてリストアップされているかのように扱います。<pattern>が与えられた場合、ブランチをシェルグロブに一致するものに制限します。パターンに?、*、または[がない場合、末尾に/*が補われます。 - --tags[=<pattern>]
-
refs/tags
内のすべての参照が、コマンドラインに<commit>としてリストアップされているかのように扱います。<pattern>が与えられた場合、タグをシェルグロブに一致するものに制限します。パターンに?、*、または[がない場合、末尾に/*が補われます。 - --remotes[=<pattern>]
-
refs/remotes
内のすべての参照が、コマンドラインに<commit>としてリストアップされているかのように扱います。<pattern>が与えられた場合、リモート追跡ブランチをシェルグロブに一致するものに制限します。パターンに?、*、または[がない場合、末尾に/*が補われます。 - --glob=<glob-pattern>
-
シェルグロブ<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
-
リフロッグによって言及されたすべてのオブジェクトが、コマンドラインに
<commit>
としてリストアップされているかのように扱います。 - --alternate-refs
-
代替リポジトリの参照ヒントとして言及されたすべてのオブジェクトが、コマンドラインにリストアップされているかのように扱います。代替リポジトリとは、そのオブジェクトディレクトリが
objects/info/alternates
で指定されている任意のリポジトリです。含まれるオブジェクトのセットは、core.alternateRefsCommand
などによって変更される場合があります。git-config[1]を参照してください。 - --single-worktree
-
デフォルトでは、複数の作業ツリーがある場合(git-worktree[1]を参照)、以下のオプション(
--all
、--reflog
、--indexed-objects
)はすべての作業ツリーを検査します。このオプションを使用すると、現在の作業ツリーのみを検査するように強制します。 - --ignore-missing
-
入力に無効なオブジェクト名が見つかった場合、その無効な入力が与えられなかったかのように扱います。
- --stdin
-
コマンドラインから引数を受け取るだけでなく、標準入力からも読み取ります。これはコミットや
--all
、--glob=
のような擬似オプションを受け入れます。--
セパレータが認識されると、それに続く入力はパスとして扱われ、結果を制限するために使用されます。標準入力経由で読み取られる--not
のようなフラグは、同じ方法で渡された引数に対してのみ尊重され、その後のコマンドライン引数には影響を与えません。 - --quiet
-
標準出力には何も出力しません。この形式は主に、オブジェクトの範囲が完全に接続されているかどうかを終了ステータスでテストするために使用されます。出力がフォーマットされる必要がないため、標準出力を
/dev/null
にリダイレクトするよりも高速です。 - --disk-usage
- --disk-usage=human
-
通常の出力を抑制し、代わりに選択されたコミットまたはオブジェクトによってディスクストレージに使用されたバイトの合計を出力します。これは、出力を
git cat-file --batch-check='%(objectsize:disk)'
にパイプすることと同等ですが、はるかに高速に実行されます(特に--use-bitmap-index
を使用する場合)。「オンディスクストレージ」が何を意味するかの制限については、git-cat-file[1]のCAVEATS
セクションを参照してください。オプション値human
を指定すると、ディスクストレージサイズが人間が読める形式の文字列(例: 12.24 Kib、3.50 Mib)で表示されます。 - --cherry-mark
-
--cherry-pick
(下記参照)と同様ですが、同等のコミットは除外するのではなく=
でマークし、同等でないコミットは+
でマークします。 - --cherry-pick
-
コミットの集合が対称差で制限されている場合、「反対側」の別のコミットと同じ変更を導入するコミットはすべて省略します。
例えば、2つのブランチ、
A
とB
がある場合、それらの片側にのみすべてのコミットをリストアップする通常のK方は、--left-right
を使用することです(--left-right
オプションの説明の以下の例を参照)。しかし、それは他のブランチからチェリーピックされたコミットを表示します(例えば、「b上の3番目」はブランチAからチェリーピックされたものかもしれません)。このオプションを使用すると、そのようなコミットのペアは出力から除外されます。 - --left-only
- --right-only
-
対称差のそれぞれの側のコミットのみをリストアップします。つまり、
--left-right
によってそれぞれ<
または>
とマークされるコミットのみをリストアップします。例えば、
--cherry-pick --right-only A...B
は、B
の中からA
に存在する、またはA
のコミットとパッチ的に同等であるコミットを省略します。言い換えれば、これは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
-
コミットの祖先チェーンを辿る代わりに、最新のものから古いものへとリフロッグエントリを辿ります。このオプションを使用する場合、除外するコミットを指定することはできません(つまり、^commit、commit1..commit2、およびcommit1...commit2の表記は使用できません)。
oneline
とreference
以外の--pretty
フォーマットを使用すると(明白な理由により)、出力にリフロッグから取得した追加の2行の情報が表示されます。出力におけるリフロッグ指定子は、いくつかのルールに応じて、ref@{<Nth>}
(<Nth>はリフロッグ内の逆時系列インデックス)または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
-
除外された境界コミットを出力します。境界コミットには
-
がプレフィックスとして付きます。 - --use-bitmap-index
-
パックビットマップインデックス(利用可能な場合)を使用してトラバーサルの速度を向上させます。
--objects
を使用してトラバースする場合、ツリーとブロブには関連するパスが出力されないことに注意してください。 - --progress=<header>
-
オブジェクトが考慮される際に、標準エラー出力に進捗レポートを表示します。
<header>
テキストは、各進捗更新とともに表示されます。
履歴の簡略化
履歴の一部、例えば特定の<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>として使用します。複数回渡すことができ、その場合、与えられたコミットのいずれかである場合、またはそれらのいずれかの祖先または子孫である場合、コミットは含まれます。
より詳細な説明は次のとおりです。
foo
を<paths>として指定したとします。foo
を変更するコミットを!TREESAME、それ以外をTREESAMEと呼びます。(foo
でフィルタリングされた差分では、それぞれ異なり、等しく見えます。)
以下では、簡略化設定の違いを説明するために、常に同じ例の履歴を参照します。このコミットグラフでファイルfoo
をフィルタリングしていると仮定します。
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
履歴の水平線A---Qは、各マージの最初の親と見なされます。コミットは次のとおりです。
-
I
は初期コミットで、そこには「asdf」という内容のfoo
が存在し、「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
とはTREESAMEではありません。 -
X
は新しいファイルside
を追加した独立したルートコミットであり、Y
がそれを変更しました。Y
はX
とTREESAMEです。そのマージQ
はP
にside
を追加し、Q
はP
とTREESAMEですが、Y
とはTREESAMEではありません。
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
はすべて辿られましたが、B
のみが!TREESAMEであったため、他は表示されません。親の書き換えなしでは、コミット間の親子関係について実際に語ることはできないため、それらを切断された状態で表示しています。
- --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
の親リストからI
が削除されました。これは、I
が他の親M
の祖先であるためです。それでも、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
自体も)になります。しかし、
M
の中のどのコミットがD
によって導入されたバグに汚染されており、修正が必要であるかを知りたい場合、実際にはD
の子孫であるD..Mのサブセットのみを表示したいと思うかもしれません。つまり、C
とK
を除外します。これはまさに--ancestry-path
オプションが行うことです。D..Mの範囲に適用すると、結果は以下のようになります。E-------F \ \ G---H---I---J \ L--M
また、
--ancestry-path
の代わりに--ancestry-path=D
を使用することもできます。これはD..Mの範囲に適用した場合、同じことを意味しますが、より明示的です。代わりに、この範囲内の特定のトピック、およびそのトピックによって影響を受けるすべてのコミットに関心がある場合、
D..M
のサブセットで、そのトピックを祖先パスに含むもののみを表示したいと思うかもしれません。したがって、例えば--ancestry-path=H D..M
を使用すると、結果は以下のようになります。E \ 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
とはTREESAMEではありません。最後に、N
を作成するための自然なマージ解決は、R
のfile.txt
の内容を取ることであるため、N
はR
とTREESAMEですが、C
とはTREESAMEではありません。マージコミットO
とP
は、それぞれの最初の親とTREESAMEですが、それぞれの2番目の親であるZ
とY
とはTREESAMEではありません。
デフォルトモードを使用すると、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とマークされます(簡略化の対象となります)。
バイセクションヘルパー
- --bisect
-
出力を、含まれるコミットと除外されるコミットの間のおおよそ中間に位置する1つのコミットオブジェクトに制限します。不良バイセクション参照
refs/bisect/bad
は含まれるコミットに追加され(存在する場合)、良好バイセクション参照refs/bisect/good-*
は除外されるコミットに追加されます(存在する場合)。したがって、refs/bisect/
に参照がないと仮定した場合、もし$ git rev-list --bisect foo ^bar ^baz
がmidpointを出力する場合、2つのコマンドの出力は
$ git rev-list foo ^midpoint $ git rev-list midpoint ^bar ^baz
おおよそ同じ長さになります。これにより、回帰を導入する変更を見つけることは二分探索に還元されます。コミットチェーンの長さが1になるまで、新しい「中間点」を繰り返し生成しテストします。
- --bisect-vars
-
これは
--bisect
と同じ計算をしますが、refs/bisect/
内の参照は使用されず、シェルによってevalされる準備ができたテキストを出力します。これらの行は、中間リビジョンの名前をbisect_rev
変数に、bisect_rev
がテストされた後にテストされる予定のコミット数をbisect_nr
に、bisect_rev
が良好であることが判明した場合にテストされる予定のコミット数をbisect_good
に、bisect_rev
が不良であることが判明した場合にテストされる予定のコミット数をbisect_bad
に、そして現在バイセクト中のコミット数をbisect_all
にそれぞれ割り当てます。 - --bisect-all
-
これは、含まれるコミットと除外されるコミットの間のすべてのコミットオブジェクトを、含まれるコミットと除外されるコミットからの距離順に出力します。
refs/bisect/
内の参照は使用されません。それらから最も遠いものが最初に表示されます。(これが--bisect
によって表示される唯一のものです。)これは、何らかの理由でテストを避けたいコミットがある場合(例えばコンパイルできない場合など)、テストする良いコミットを簡単に選択できるため便利です。
このオプションは
--bisect-vars
と組み合わせて使用できます。この場合、ソートされたすべてのコミットオブジェクトの後に、--bisect-vars
が単独で使用された場合と同じテキストが表示されます。
コミットの順序付け
デフォルトでは、コミットは逆時系列順に表示されます。
- --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
とは組み合わせることができません。
オブジェクトの走査
これらのオプションは、主にGitリポジトリのパック化を対象としています。
- --objects
-
リストされたコミットによって参照されるすべてのオブジェクトのオブジェクトIDを出力します。したがって、
--objects foo ^bar
は「コミットオブジェクトbarは持っているがfooは持っていない場合にダウンロードする必要があるすべてのオブジェクトIDを送信せよ」という意味になります。下記の--object-names
も参照してください。 - --in-commit-order
-
ツリーとブロブのIDをコミットの順序で出力します。ツリーとブロブのIDは、コミットによって最初に参照された後に出力されます。
- --objects-edge
-
--objects
に似ていますが、除外されたコミットのIDに「-」文字をプレフィックスとして付けて出力します。これはgit-pack-objects[1]によって「シン」パックを構築するために使用され、ネットワークトラフィックを削減するために、これらの除外されたコミットに含まれるオブジェクトに基づいてデルタ形式でオブジェクトを記録します。 - --objects-edge-aggressive
-
--objects-edge
に似ていますが、時間を犠牲にして除外されたコミットを見つけるためにより積極的に試みます。これは、シャローリポジトリ用の「シン」パックを構築するために--objects-edge
の代わりに使用されます。 - --indexed-objects
-
インデックスによって使用されるすべてのツリーとブロブがコマンドラインにリストされているかのように扱います。おそらく
--objects
も使用したいでしょう。 - --unpacked
-
--objects
と併用した場合にのみ有用です。パックにないオブジェクトIDを出力します。 - --object-names
-
--objects
と併用した場合にのみ有用です。見つかったオブジェクトIDの名前を出力します。これがデフォルトの動作です。各オブジェクトの「名前」は曖昧であり、主にオブジェクトのパック化のヒントとして意図されていることに注意してください。特に、タグ、ツリー、ブロブの名前の区別は行われません。パス名が改行を削除するために変更される場合があります。また、オブジェクトが異なる名前で複数回表示される場合、1つの名前のみが表示されます。 - --no-object-names
-
--objects
と併用した場合にのみ有用です。見つかったオブジェクトIDの名前は出力しません。これは--object-names
を反転させます。このフラグにより、git-cat-file[1]などのコマンドで出力をより簡単に解析できるようになります。 - --filter=<filter-spec>
-
--objects*
のいずれかと併用した場合にのみ有用です。出力されるオブジェクトのリストからオブジェクト(通常はブロブ)を省略します。<filter-spec>は以下のいずれかです。形式--filter=blob:noneは、すべてのブロブを省略します。
形式--filter=blob:limit=<n>[kmg]は、サイズが少なくともnバイトまたは単位のブロブを省略します。nはゼロでも構いません。接尾辞k、m、gは、KiB、MiB、またはGiBの単位を示すために使用できます。例えば、blob:limit=1kはblob:limit=1024と同じです。
形式--filter=object:type=(tag|commit|tree|blob)は、要求されたタイプではないすべてのオブジェクトを省略します。
形式--filter=sparse:oid=<blob-ish>は、ブロブ(またはブロブ式)<blob-ish>に含まれる疎チェックアウト仕様を使用して、要求された参照での疎チェックアウトに必要とされないブロブを省略します。
形式--filter=tree:<depth>は、ルートツリーからの深さが<depth>以上のすべてのブロブとツリーを省略します(オブジェクトが走査されたコミット内で複数の深さに存在する場合は最小深さ)。<depth>=0の場合、コマンドライン(または--stdin使用時の標準入力)で明示的に含まれない限り、ツリーやブロブは一切含まれません。<depth>=1の場合、<commit>から到達可能なコミットまたは明示的に指定されたオブジェクトによって直接参照されるツリーとブロブのみが含まれます。<depth>=2は<depth>=1と同様ですが、明示的に指定されたコミットまたはツリーからさらに1レベル離れたツリーとブロブも含まれます。
ファイルシステム上の任意のパスから読み取ることを意図した形式--filter=sparse:path=<path>は、セキュリティ上の理由から廃止されました。
複数の--filter=フラグを指定して、フィルタを組み合わせることができます。すべてのフィルタによって受け入れられたオブジェクトのみが含まれます。
形式--filter=combine:<filter1>+<filter2>+…<filterN>もいくつかのフィルタを組み合わせるために使用できますが、これは単に--filterフラグを繰り返すよりも難しく、通常は不要です。フィルタは+で結合され、個々のフィルタは%-エンコードされます(つまりURLエンコード)。+と%文字の他に、以下の文字も予約されており、エンコードする必要があります:
~!@#$^&*()[]{}\;",<>?
'`
、およびASCIIコードが0x20
以下のすべての文字(スペースと改行を含む)。他の任意の文字もエンコードできます。例えば、combine:tree:3+blob:noneとcombine:tree%3A3+blob%3Anoneは同等です。
- --no-filter
-
以前の
--filter=
引数をすべて無効にします。 - --filter-provided-objects
-
明示的に提供されたオブジェクトのリストをフィルタリングします。これらのオブジェクトは、どのフィルタにも一致しない場合でも常に表示されます。
--filter=
と併用した場合にのみ有用です。 - --filter-print-omitted
-
--filter=
と併用した場合にのみ有用です。フィルタによって省略されたオブジェクトのリストを出力します。オブジェクトIDには「~」文字がプレフィックスとして付きます。 - --missing=<missing-action>
-
将来の「部分クローン」開発に役立つデバッグオプションです。このオプションは、欠落オブジェクトの処理方法を指定します。
形式--missing=errorは、欠落オブジェクトに遭遇した場合にrev-listがエラーで停止することを要求します。これがデフォルトの動作です。
形式--missing=allow-anyは、欠落オブジェクトに遭遇した場合でもオブジェクトの走査を続行させます。欠落オブジェクトは結果から黙って省略されます。
The form --missing=allow-promisor is like allow-any, but will only allow object traversal to continue for EXPECTED promisor missing objects. Unexpected missing objects will raise an error.
The form --missing=print is like allow-any, but will also print a list of the missing objects. Object IDs are prefixed with a “?” character.
The form --missing=print-info is like print, but will also print additional information about the missing object inferred from its containing object. The information is all printed on the same line with the missing object ID in the form:
?<oid> [<token>=<value>]...
. The<token>=<value>
pairs containing additional information are separated from each other by a SP. The value is encoded in a token specific fashion, but SP or LF contained in value are always expected to be represented in such a way that the resulting encoded value does not have either of these two problematic bytes. Each<token>=<value>
may be one of the following-
The
path=<path>
shows the path of the missing object inferred from a containing object. A path containing SP or special characters is enclosed in double-quotes in the C style as needed. -
The
type=<type>
shows the type of the missing object inferred from a containing object.
If some tips passed to the traversal are missing, they will be considered as missing too, and the traversal will ignore them. In case we cannot get their Object ID though, an error will be raised.
-
- --exclude-promisor-objects
-
(内部使用のみ。)プロミサー境界でのオブジェクト走査を事前フィルタリングします。これは部分クローンで使用されます。これは、欠落オブジェクトに関するエラーを単に抑制するだけでなく、走査を制限するため、
--missing=allow-promisor
よりも強力です。 - --no-walk[=(sorted|unsorted)]
-
指定されたコミットのみを表示し、その祖先は走査しません。範囲が指定されている場合、これは効果がありません。引数
unsorted
が与えられた場合、コミットはコマンドラインで与えられた順序で表示されます。それ以外の場合(sorted
または引数が与えられなかった場合)、コミットはコミット時刻の逆年代順に表示されます。--graph
と組み合わせることはできません。 - --do-walk
-
以前の
--no-walk
を上書きします。
コミットのフォーマット
これらのオプションを使用すると、git-rev-list[1] は、より専門的なコミットログツール群(git-log[1]、git-show[1]、git-whatchanged[1])と同様に動作します。
- --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>」オプション(表示される場合、差分出力も変更します)を使用して、プレフィックスの最小長を指定できます。
これにより、「--pretty=oneline」が80桁のターミナルを使用している人にとって非常に読みやすくなるはずです。
- --no-abbrev-commit
-
完全な40バイトの16進数のコミットオブジェクト名を表示します。これは、明示的であろうと「--oneline」などの他のオプションによって暗黙的であろうと、
--abbrev-commit
を打ち消します。また、log.abbrevCommit
変数を上書きします。 - --oneline
-
これは、「--pretty=oneline --abbrev-commit」を同時に使用する場合の短縮形です。
- --encoding=<encoding>
-
コミットオブジェクトは、ログメッセージに使用された文字エンコーディングをそのエンコーディングヘッダーに記録します。このオプションは、ユーザーが好むエンコーディングでコミットログメッセージを再エンコードするようにコマンドに指示するために使用できます。plumbingコマンドではない場合、これはデフォルトで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)ではタブが展開されます。
- --show-signature
-
署名付きコミットオブジェクトの有効性を確認するために、署名を
gpg --verify
に渡して出力を表示します。 - --relative-date
-
--date=relative
の同義語。 - --date=<format>
-
--pretty
を使用する場合など、人間が読める形式で表示される日付にのみ影響します。log.date
設定変数は、logコマンドの--date
オプションのデフォルト値を設定します。デフォルトでは、日付は元のタイムゾーン(コミッターまたは作者のいずれか)で表示されます。形式に-local
が追加された場合(例:iso-local
)、代わりにユーザーのローカルタイムゾーンが使用されます。--date=relative
は、現在時刻からの相対的な日付を表示します(例: 「2時間前」)。-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:...
は、%s、%z、%Z を除く、フォーマット...
をシステムstrftime
に渡します。これらは内部で処理されます。システムロケールの優先フォーマットで日付を表示するには、--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
)。 -
- --header
-
コミットの内容をrawフォーマットで出力します。各レコードはNUL文字で区切られます。
- --no-commit-header
-
指定されたフォーマットの前に出力される「commit」とオブジェクトIDを含むヘッダー行を抑制します。これは組み込みフォーマットには効果がなく、カスタムフォーマットのみに影響します。
- --commit-header
-
以前の
--no-commit-header
を上書きします。 - --parents
-
コミットの親も表示します(「commit parent…」の形式)。また、親の書き換えも有効にします。上記のHistory Simplificationを参照してください。
- --children
-
コミットの子も表示します(「commit child…」の形式)。また、親の書き換えも有効にします。上記のHistory Simplificationを参照してください。
- --timestamp
-
生のコミットタイムスタンプを表示します。
- --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>
が指定された場合、それはデフォルトの文字列の代わりに表示される文字列です。 - --count
-
いくつのコミットがリストされたかを示す数を出力し、他のすべての出力を抑制します。
--left-right
と一緒に使用すると、代わりに左右のコミット数をタブで区切って出力します。--cherry-mark
と一緒に使用すると、これらのカウントからパッチが同等のコミットを除外し、同等のコミットのカウントをタブで区切って出力します。
整形フォーマット
コミットがマージであり、整形フォーマットが oneline、email、または raw でない場合、Author: 行の前に追加の行が挿入されます。この行は「Merge: 」で始まり、祖先コミットのハッシュがスペースで区切られて出力されます。履歴の表示を制限している場合、リストされたコミットが必ずしも直接の親コミットのリストではない可能性があることに注意してください。たとえば、特定のディレクトリやファイルに関連する変更のみに関心がある場合などです。
いくつかの組み込みフォーマットがあり、以下に説明するように、pretty.<name> 設定オプションを別のフォーマット名または format: 文字列に設定することで、追加のフォーマットを定義できます(git-config[1] を参照)。組み込みフォーマットの詳細は以下の通りです。
-
oneline
<hash> <title-line>
これは可能な限りコンパクトになるように設計されています。
-
short
commit <hash> Author: <author>
<title-line>
-
medium
commit <hash> Author: <author> Date: <author-date>
<title-line>
<full-commit-message>
-
full
commit <hash> Author: <author> Commit: <committer>
<title-line>
<full-commit-message>
-
fuller
commit <hash> Author: <author> AuthorDate: <author-date> Commit: <committer> CommitDate: <committer-date>
<title-line>
<full-commit-message>
-
reference
<abbrev-hash> (<title-line>, <short-author-date>)
このフォーマットは、コミットメッセージで別のコミットを参照するために使用され、
--pretty='format:%C(auto)%h (%s, %ad)'
と同じです。デフォルトでは、別の--date
オプションが明示的に指定されない限り、日付は--date=short
でフォーマットされます。フォーマットプレースホルダーを持つすべてのformat:
と同様に、その出力は--decorate
や--walk-reflogs
などの他のオプションの影響を受けません。 -
email
From <hash> <date> From: <author> Date: <author-date> Subject: [PATCH] <title-line>
<full-commit-message>
-
mboxrd
email と同様ですが、コミットメッセージ内の「From 」で始まる行(0個以上の「>」が前置される)は、「>」で引用符付けされ、新しいコミットの開始と混同されないようにします。
-
raw
raw フォーマットは、コミットオブジェクトに格納されているとおりのコミット全体を表示します。特に、ハッシュは --abbrev または --no-abbrev の使用にかかわらず完全に表示され、parents 情報はグラフや履歴の簡素化を考慮せずに真の親コミットを表示します。このフォーマットはコミットの表示方法に影響しますが、
git log --raw
のように差分が表示される方法には影響しないことに注意してください。raw差分フォーマットで完全なオブジェクト名を取得するには、--no-abbrev
を使用してください。 -
format:<format-string>
format:<format-string> フォーマットを使用すると、表示したい情報を指定できます。これは printf フォーマットと少し似ていますが、\n の代わりに %n で改行が得られるという顕著な例外があります。
例: format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" は次のように表示されます。
The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
プレースホルダーは次のとおりです。
-
単一のリテラル文字に展開されるプレースホルダー
-
後のプレースホルダーの書式設定に影響を与えるプレースホルダー
- %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
-
生の本文(ラップされていないサブジェクトと本文)
- %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> には、上記で説明したリテラル書式設定コードを含めることができます。カンマを区切り文字として使用するには、それ以外の場合に次のオプションとして解析されてしまうため、
%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
使用例
-
現在のブランチから到達可能なコミットのリストを表示します。
git rev-list HEAD
-
このブランチにあるが、アップストリームブランチには存在しないコミットのリストを表示します。
git rev-list @{upstream}..HEAD
-
作者とコミットメッセージでコミットをフォーマットします(porcelainコマンド git-log[1] も参照)。
git rev-list --format=medium HEAD
-
コミットを差分とともにフォーマットします(単一プロセスでこれを実行できるporcelainコマンド git-log[1] も参照)。
git rev-list HEAD | git diff-tree --stdin --format=medium -p
-
現在のブランチ上で
Documentation
ディレクトリ内のファイルを触ったコミットのリストを表示します。git rev-list HEAD -- Documentation/
-
過去1年間にあなたが作者となった、任意のブランチ、タグ、またはその他の参照上のコミットのリストを表示します。
git rev-list --author=you@example.com --since=1.year.ago --all
-
現在のブランチから到達可能なオブジェクトのリストを表示します(つまり、すべてのコミットとそれらが含むブロブおよびツリー)。
git rev-list --objects HEAD
-
到達可能なすべてのオブジェクトのディスクサイズと、リフロッグから到達可能なオブジェクトのディスクサイズ、および合計パックサイズを比較します。これにより、
git repack -ad
を実行することでリポジトリサイズが減少するかどうか(到達不能なオブジェクトを破棄することで)、およびリフロッグの期限切れが役立つかどうかが分かります。# reachable objects git rev-list --disk-usage --objects --all # plus reflogs git rev-list --disk-usage --objects --all --reflog # total disk size used du -c .git/objects/pack/*.pack .git/objects/??/* # alternative to du: add up "size" and "size-pack" fields git count-objects -v
-
現在のブランチで使用されているオブジェクトを含まない、各ブランチのディスクサイズを報告します。これにより、肥大化したリポジトリサイズに寄与している異常値(例: 誰かが誤って大きなビルドアーティファクトをコミットしたため)を見つけることができます。
git for-each-ref --format='%(refname)' | while read branch do size=$(git rev-list --disk-usage --objects HEAD..$branch) echo "$size $branch" done | sort -n
-
ある参照グループ内のブランチのオンディスクサイズを、別のグループを除外して比較します。複数のリモートからのオブジェクトを単一のリポジトリに混在させている場合、これはどのリモートがリポジトリサイズに寄与しているかを示すことができます(
origin
のサイズをベースラインとして)。git rev-list --disk-usage --objects --remotes=$suspect --not --remotes=origin
Git
git[1] スイートの一部