git-status

コマンド名

「git-status」:ワークツリーのステータスを表示

概要

git status [<options>…] [–] [<pathspec>…]

説明

インデックスファイルと現在のヘッドコミットに違いがあるパス、ワークツリーとインデックスファイルに違いがあるパス、Gitによって追跡されない(そしてgitignore[5]によって無視されない)ワークツリー内のパスを表示します。1つ目はgit commitを実行してコミットするものです。2番目と3番目はgit commitを実行する前に「gitadd」を実行することでコミットできるものです。

オプション

-s
--short

ショートフォーマットで出力します。

-b
--branch

ショートフォーマットでもブランチと追跡情報を表示します。

--show-stash

現在隠されているエントリの数を表示します。

--porcelain[=<version>]

スクリプトの出力を解析しやすいフォーマットで提供します。これはショート出力に似ていますが、Gitのバージョン間でユーザー構成に関係なく安定しています。詳細については以下を参照してください。
バージョンパラメーターはフォーマットのバージョンを指定するために使用されます。これはオプションであり、デフォルトでオリジナルバージョン「v1」フォーマットになります。

--long

ロングフォーマットで出力します。これがデフォルトとなります。

-v
--verbose

変更されたファイルの名前に加えて、コミットされるようにステージングされたテキストの変更も表示します(つまりgit diff --cachedの出力)。-vが2回指定されている場合、まだステージングされていないワークツリーの変更も表示します(つまりgit diffの出力など)。

-u[<mode>]
--untracked-files[=<mode>]

追跡されていないファイルを表示します。

モードパラメーターは追跡されていないファイルの処理を指定するために使用されます。これはオプションです。デフォルトは「all」となっており、指定する場合はオプションに固定する必要があります(例えば、-unoですが、-u noではありません)。

可能なオプションは次のとおりです。

  • 「no」:追跡されていないファイルを表示しません。
  • 「normal」:追跡されていないファイルとディレクトリを表示します。
  • 「all」:追跡されていないディレクトリ内の個々のファイルも表示します。

-uオプションを使用しない場合、追跡されていないファイルとディレクトリが表示され(つまり、通常の指定と同じ)、新しく作成されたファイルの追加を忘れないようにします。ファイルシステム内の追跡されていないファイルを見つけるには余分な作業が必要なため、このモードは大きなワークツリーでは時間がかかる場合があります。サポートされている場合、追跡されていないキャッシュと分割インデックスを有効にすることを検討してください(git update-index --untracked-cachegit update-index --split-indexを参照)。そうでない場合、noを使用して、追跡されていないファイルを表示せずにgit status をより迅速に返すことができます。

デフォルトはgit-config[1]に記載されている「status.showUntrackedFiles」構成変数を使用して変更できます。

--ignore-submodules[=<when>]

変更を探す時、サブモジュールへの変更を無視します。 <when>は「none」、「untracked」、「dirty」、または「all」のいずれかになります。これがデフォルトとなります。「none」を使用すると、追跡されていないファイルまたは変更されたファイルが含まれている場合、またはそのヘッドがスーパープロジェクトに記録されているコミットと異なる場合にサブモジュールが変更されたと見なされ、git-config[1]またはgitmodules[5]オプションの設定を上書きできます。「untracked」が使用されている場合、サブモジュールは追跡されていないコンテンツのみが含まれている場合、ダーティとは見なされません(ただし、変更されたコンテンツはスキャンされます)。「dirty」を使用するとサブモジュールのワークツリーへのすべての変更が無視され、スーパープロジェクトに格納されているコミットへの変更のみが表示されます(これは1.7.0より前の動作でした)。「all」を使用すると、サブモジュールへのすべての変更が非表示になります(また構成オプションstatus.submoduleSummaryが設定されている場合、サブモジュールの要約の出力が抑制されます)。

--ignored[=<mode>]

無視されたファイルも表示します。

モードパラメーターは無視されたファイルの処理を指定するために使用されます。これはオプションです。デフォルトは従来型となっています。

可能なオプションは次のとおりです。

  • 「traditional」:「untracked-files = all」が指定されていない限り、無視されたファイルとディレクトリを表示します。指定されている場合、無視されたディレクトリ内の個々のファイルが表示されます。
  • 「no」:無視されたファイルを表示しません。
  • 「matching」:無視パターンに一致する無視されたファイルとディレクトリを表示します。

マッチングモードを指定すると、無視されたパターンに明示的に一致するパスが表示されます。ディレクトリが無視パターンに一致する場合、それは表示されますが、無視されたディレクトリに含まれるパスは表示されません。ディレクトリが無視パターンに一致しないが、すべての内容が無視される場合、ディレクトリは表示されませんが、すべての内容が表示されます。

-z

LFではなくNULでエントリを終了します。これは他のフォーマットが指定されていない場合、--porcelain=v1出力フォーマットを意味します。

--column[=<options>]
--no-column

追跡されていないファイルを列に表示します。オプションの構文については構成変数「column.status」を参照してください。—column--no-columnオプションなしで、それぞれ、「always」および「never」と同等となります。

--ahead-behind
--no-ahead-behind

アップストリームブランチに関連するブランチの詳細な前後カウントを表示、もしくは表示しません。デフォルトは「true」です。

--renames
--no-renames

ユーザー構成に関係なく名前変更検出のオン/オフを切り替えます。--no-renamesについてgit-diff[1]も参照してください。

--find-renames[=<n>]

名前変更検出をオンにし、オプションで類似性のしきい値を設定します。--find-renamesについてgit-diff[1]も参照してください。

<pathspec>…

gitglossary[7]のパススペックエントリを参照してください。

出力

このコマンドの出力はコミットテンプレートコメントとして使用するように設計されています。デフォルトのロングフォーマットは人が読めるフォーマットで、冗長で、説明的であるように設計されています。その内容とフォーマットはいつでも変更される可能性があります。

他の多くのGitコマンドとは異なり、出力に記載されているパスはサブディレクトリで作業している場合、現在のディレクトリを基準にして作成されます(これは切り取りと貼り付けを支援するための意図的なものです)。 以下の「status.relativePaths」構成オプションを参照してください。

ショートフォーマット

ショートフォーマットでは各パスのステータスはこれらのフォーマットの1つとして表示されます

XY PATH
XY ORIG_PATH -> PATH

ここでORIG_PATH は名前が変更/コピーされたコンテンツの取得元です。ORIG_PATH はエントリの名前が変更またはコピーされた場合にのみ表示されます。XYは2文字のステータスコードです。

フィールド(->を含む)はシングルスペースで互いに分離されています。ファイル名に空白またはその他の印刷不可能な文字が含まれている場合、そのフィールドはC文字列リテラルの方法で引用されます。ASCII二重引用符(34)文字で囲まれ、内部の特殊文字はバックスラッシュでエスケープされます。

マージコンフリクトがあるパスの場合、XY はマージの両側の変更状態を示します。マージコンフリクトがないパスの場合、Xはインデックスのステータスを示し、Yはワークツリーのステータスを示します。追跡されていないパスの場合、XY??です。その他のステータスコードは次のように解釈できます。

  • ” =変更なし
  • M =変更
  • A =追加
  • D =削除
  • R =名前の変更
  • C =コピー
  • U =更新したが、マージしていない

--ignored オプションが有効になっていない限り、無視されたファイルはリストされません。有効な場合、XY!!です。

X          Y     Meaning
-------------------------------------------------
[AMD]   not updated
M        [ MD]   updated in index
A        [ MD]   added to index
D                deleted from index
R        [ MD]   renamed in index
C        [ MD]   copied in index
[MARC]           index and work tree matches
[ MARC]     M    work tree changed since index
[ MARC]     D    deleted in work tree
[ D]        R    renamed in work tree
[ D]        C    copied in work tree
-------------------------------------------------
D           D    unmerged, both deleted
A           U    unmerged, added by us
U           D    unmerged, deleted by them
U           A    unmerged, added by them
D           U    unmerged, deleted by us
A           A    unmerged, both added
U           U    unmerged, both modified
-------------------------------------------------
?           ?    untracked
!           !    ignored
-------------------------------------------------

サブモジュールはより多くのステータスを持ち、代わりにレポートMサブモジュールはインデックスに記録されたものとは異なるヘッドを持ち、サブモジュールは修正した「?」コンテンツを変更し、サブモジュール内の変更されたコンテンツまたは追跡されていないファイルはコミットを準備するためにスーパープロジェクトのgit addを介して追加できないため、サブモジュールには追跡されていないファイルがあります。

「m」と「? 」は再帰的に適用されます。例えば、サブモジュール内のネストされたサブモジュールに追跡されていないファイルが含まれている場合、これは「?」として報告されます。

「-b」が使用されている場合、ショートフォーマットのステータスの前にラインが表示されます。

## branchname tracking info

ポーセレンフォーマットバージョン1

バージョン1のポーセレンフォーマットはショートフォーマットに似ていますが、Gitバージョン間またはユーザー構成に基づいて後方互換性のない方法で変更されないことが保証されています。これによりスクリプトによる解析に最適となります。上記のショートフォーマットの説明ではいくつかの例外を除いて、ポーセレンフォーマットについても説明しています。

  1. ユーザーの「color.status」構成は優先されません。色は常にオフになります。
  2. ユーザーの「status.relativePaths」構成は優先されません。表示されるパスは常にリポジトリルートを基準にしています。

マシン解析に推奨される代替の「-z」フォーマットもあります。そのフォーマットではステータスフィールドは同じですが、他のいくつかの点が異なります。まず名前変更エントリから「->」が省略され、フィールドの順序が逆になります(例えば、「->」から「to」になります)。 次に、NUL(ASCII 0)が各ファイル名の後に続き、スペースをフィールド区切り文字として置き換え、改ラインを終了します(ただし、スペースはステータスフィールドを最初のファイル名から分離します)。 第三に特殊文字を含むファイル名は特別にフォーマットされていません。引用符や円記号のエスケープは実行されません。

サブモジュールの変更はm またはシングル?ではなく変更されたMとして報告されます。

ポーセレンフォーマットバージョン2

バージョン2フォーマットではワークツリーの状態と変更されたアイテムに関するより詳細な情報が追加されます。バージョン2は解析が容易なオプションのヘッダーの拡張可能なセットも定義しています。

ヘッダーラインは「#」で始まり、特定のコマンドライン引数に応答して追加されます。パーサーは認識できないヘッダーを無視する必要があります。

ブランチヘッダー

--branchを指定すると、一連のヘッダーラインに現在のブランチに関する情報が出力されます。

Line                                     Notes
------------------------------------------------------------
# branch.oid <commit> | (initial)        Current commit.
# branch.head <branch> | (detached)      Current branch.
# branch.upstream <upstream_branch>      If upstream is set.
# branch.ab +<ahead> -<behind>           If upstream is set and
the commit is present.
------------------------------------------------------------

変更された追跡エントリ

ヘッダーに続いて、追跡されたエントリに対して一連のラインが出力されます。変更の種類に応じて3つの異なるラインフォーマットのいずれかを使用してエントリを記述することができます。追跡されたエントリは未定義の順序で印刷されます。パーサーは3つのラインタイプの混合ができるようにする必要があります。

通常の変更されたエントリフォーマットは次のとおりです。

1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path>

名前が変更またはコピーされたエントリのフォーマットは次のとおりです。

2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath>
Field       Meaning
--------------------------------------------------------
<XY>        A 2 character field containing the staged and
unstaged XY values described in the short format,
with unchanged indicated by a "." rather than
a space.
<sub>       A 4 character field describing the submodule state.
"N..." when the entry is not a submodule.
"S<c><m><u>" when the entry is a submodule.
<c> is "C" if the commit changed; otherwise ".".
<m> is "M" if it has tracked changes; otherwise ".".
<u> is "U" if there are untracked changes; otherwise ".".
<mH>        The octal file mode in HEAD.
<mI>        The octal file mode in the index.
<mW>        The octal file mode in the worktree.
<hH>        The object name in HEAD.
<hI>        The object name in the index.
<X><score>  The rename or copy score (denoting the percentage
of similarity between the source and target of the
move or copy). For example "R100" or "C75".
<path>      The pathname.  In a renamed/copied entry, this
is the target path.
<sep>       When the `-z` option is used, the 2 pathnames are separated
with a NUL (ASCII 0x00) byte; otherwise, a tab (ASCII 0x09)
byte separates them.
<origPath>  The pathname in the commit at HEAD or in the index.
This is only present in a renamed/copied entry, and
tells where the renamed/copied contents came from.
--------------------------------------------------------

マージされていないエントリのフォーマットは次のとおりです。最初の文字は通常の変更されたエントリと区別するための「u」となっています。

u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
Field       Meaning
--------------------------------------------------------
<XY>        A 2 character field describing the conflict type
as described in the short format.
<sub>       A 4 character field describing the submodule state
as described above.
<m1>        The octal file mode in stage 1.
<m2>        The octal file mode in stage 2.
<m3>        The octal file mode in stage 3.
<mW>        The octal file mode in the worktree.
<h1>        The object name in stage 1.
<h2>        The object name in stage 2.
<h3>        The object name in stage 3.
<path>      The pathname.
--------------------------------------------------------

他の項目

追跡されたエントリに続いて(そして要求された場合)、一連のラインが追跡されていないために印刷され、ワークツリーで見つかったアイテムは無視されます。

追跡されていないアイテムのフォーマットは次のとおりです。

? <path>

無視されるアイテムのフォーマットは次のとおりです。

! <path>

パス名のフォーマットに関する注意事項と-z

-zオプションを指定すると、パス名は引用符なしでそのまま出力され、行はNUL(ASCII 0x00)バイトで終了します。

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

構成

このコマンドはcolor.status (またはstatus.colorこれらは同じことを意味し、後者は下位互換性のために保持されます)およびcolor.status.<slot>構成変数を優先して出力を色付けします。

構成変数status.relativePathsが「false」に設定されている場合、表示されるすべてのパスは現在のディレクトリではなく、リポジトリルートを基準にしています。

status.submoduleSummary がゼロ以外の数値または「true」(-1または無制限の数値と同じ)に設定されている場合、サブモジュールの概要はロングフォーマットで有効になり、変更されたサブモジュールのコミットの概要が表示されます(git-submodule[1]の制限オプションである「–summary」を参照)。diff.ignoreSubmodulesが「all」またはサブモジュールに設定されている場合、またsubmodule.<name>.ignore=allである場合、ステータスコマンドからの要約出力はすべてのサブモジュールで抑制されることに注意してください。無視されたサブモジュールの概要も表示するには「–ignore-submodules=dirty」コマンドラインオプションまたは「gitsubmodule summary」コマンドを使用できます。これは同様の出力を表示しますが、これらの設定を優先しません。

背景の更新

デフォルトではgit status はインデックスを自動的に更新し、ワークツリーからキャッシュされた統計情報を更新して、結果を書き出します。更新されたインデックスを書き出すことは厳密には必要ではない最適化です(statusはそれ自体の値を計算しますが、それらを書き出すことは、後続のプログラムが計算を繰り返さないようにするためだけです)。statusがバックグラウンドで実行されている場合、書き込み中に保持されているロックが他の同時プロセスと競合し、それらが失敗する可能性があります。 バックグラウンドでstatusを実行しているスクリプトはgit --no-optional-locks status の使用を検討する必要があります(詳細についてはgit[1]を参照してください)。

参照

gitignore[5]

GIT

git[1]パッケージソフトの一部

git公式ドキュメント

status