Gitで頻繁に使用するコマンドの一つに「git status」があります。
git statusはコミットする前に、ステージ前やステージ後の差分のあるファイルを確認するコマンドです。
git statusのオプションに「-s」オプション(または –short)があります。
このオプションを使うと、表示される内容がかなりシンプルになりますが、同時に冒頭によくわからないアルファベットや記号が1文字あるいは2文字追加されます。
A, M, D, ?, U, !, C, R, AD, AM, ??, MM, UUといったものです。
ここではgit status -sとは何か?やその使い方、各アルファベットの意味や見方についてまとめています。
git statusの-sオプションとは何か?(–shortオプション)とは何か?
git statusのオプションに「-s」オプション(または –short)は、shortという名前が示すように、ステージ前のファイルやステージ後のファイルなどの変更内容を端的に表示するコマンドです。
通常のgit statusだとかなり長い表示になりますが、「-s」オプション(または –short)を使うことでかなり短い表示になります。
実例
オプションをつけないgit status
通常のgit statusは以下のようになります。
$ git status
On branch test
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/App.vue
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: src/components/HelloWorld.vue
modified: src/components/UserDetail.vue
-s(–short)オプションを付けた場合
-sオプションを付けて、git status -s
を実行する以下のようになります。
$ git status -s
M src/App.vue
M src/components/HelloWorld.vue
M src/components/UserDetail.vue
なお–shortで表示される内容も全く同じです。
$ git status --short
M src/App.vue
M src/components/HelloWorld.vue
M src/components/UserDetail.vue
上記の例であれば、記号はMのみですが、一番上のファイルと下2つのファイルでMの位置がずれていることに注目してください。
VSCodeの場合以下のようにカラフルな大文字のアルファベットで表示されます。
その際、M以外にも、A、D、R、CやAD、AMといった表記があります。
各ファイル毎に表示され、ファイルの状態が一目でわかるようになっていますが、冒頭のアルファベットの意味を理解していないとよくわからないことになってしまいます。
冒頭のアルファベットが意味していること
変更があった各ファイルの冒頭には1つあるいは2つのアルファベットがつきます。
「XY」という構造です。これは以下の意味になります。
なお、git add前後の関係は以下のようになります。
ローカルレポジトリ
↑ commit
ステージ(インデックス)【←左側】
↑ add
ワークツリー 【←右側】
VSCodeの場合、分かりやすいように色分けされています。
・赤色:add前(ステージ前)
・緑色:add済み(コミット前)
各アルファベットの意味
表示される各アルファベットはそれぞれ個別の意味を持っています。頻出するのは、A、M、D、?の4つです。
Uはコンフリクトが発生したときに表示されます。
アルファベット | 単語 | 意味 |
---|---|---|
A | added | 新規ファイル。gitが新規に追跡したファイル |
M | modified | 変更があったファイル |
D | deleted | 削除されたファイル |
R | renamed | 名前変更 |
C | copied | コピー |
U | unmerged | マージしていない |
? | untracked | 未追跡。gitが認識していない。 |
! | ignored | 無視 |
状態一覧
ステージ前とステージ後の組み合わせで表示される内容をまとめると以下のようになります。
X | Y | 意味 |
---|---|---|
? | ? | gitが認識していない。新規作成し、git add前のファイル。 |
M | 変更したが、git addしてないファイル | |
A | 新規作成し、git addされたファイル。コミット前 | |
M | M | 変更しgit addした後に、また変更したファイル(add前)。 |
D | git認識済みのファイルが削除された。(add前) | |
D | ステージのファイルが削除された(add後、commit前) | |
A | D | ステージに追加したファイル(A)が消され、addしてない状態。 |
U | U | コンフリクト。それぞれのブランチで変更されている |
A | A | コンフリクト。それぞれのブランチで新たに追加されている |
なお上記以外にもあります。
詳細はgit公式のgit stateコマンドページ参照ください。