はじめに
Gitで作業をしていると、「今どのファイルが変更されているのか」、「コミットできる状態なのか」、「まだGitで管理されていないファイルはあるのか」といった現在の状態を確認したくなる場面がよくあります。
そのようなときに使うのが、git status コマンドです。
git statusを使えば、作業ディレクトリやステージングエリアの状態を確認できるため、コミット前のチェックや作業ミスの防止に役立ちます。ただし、初心者の方にとっては表示内容が少しわかりにくく、「結局何を見ればよいのか分からない」と感じることもあるかもしれません。
この記事では、git statusで現在の状態を確認する方法をはじめ、オプションの意味やよくある表示例まで、わかりやすく解説したいと思います。
git statusとは?
git statusは、現在のGit管理状態を確認するためのコマンドです。
主に、次のような内容を確認できます。
- どのファイルが変更されたか
- どのファイルがステージングされているか
- どのファイルがまだ追跡されていないか
- 今いるブランチは何か
- コミットできる変更があるか
Gitでは、ファイルを編集しただけではすぐにコミットされません。
通常は、次のような流れで作業が進みます。
この流れの中で、今どの段階にあるのかを確認するために使うのが git status です。
git statusで確認できること
git statusを実行すると、現在の状態がまとめて表示されます。
たとえば、以下のような情報です。
- 作業ツリーに変更があるか
- コミット予定の変更があるか
- 未追跡ファイルが存在するか
- 作業ツリーがクリーンな状態か
つまり、git statusはGit作業の進行状況を確認するための基本コマンドといえます。
なぜgit statusが重要なのか
Gitの操作でミスを防ぐうえで、git statusは非常に重要です。
たとえば、次のような失敗はよくあります。
- 変更したつもりのファイルがステージングされていなかった
- 不要なファイルまでコミット対象に入っていた
- 新しく作成したファイルを add し忘れていた
- 余計な変更を含んだままコミットしそうになった
このようなトラブルは、コミット前にgit statusを確認する習慣をつけることで防ぎやすくなります。
【構文】git statusで現在の状態を確認する方法
git statusの使い方はとてもシンプルです。
Gitで管理されているプロジェクトのディレクトリで、次のコマンドを実行します。
# 構文
$ git status [<オプション>]すごく簡単ですね。
使い方は単純なのですが、「$ git status」と打って実行したり「$ git status -s」などのオプションも付与して実行したり、「$ git status -u <モード>」などもあります。
オプションについてはいろいろありますので、下記の表に記載しました。
オプションの説明
基本的なオプション
オプションについてはいくつかありますが、ディレクトリ内のファイル数が多いのであれば「-s」を使って見やすくしたり、バージョン管理対象外のファイルの表示方法を変更してみたり、いろいろ試されるのが良いかと思います。
| オプション | 説明 |
|---|---|
| -s (–short) | ファイルの状態を簡易表示する。ファイル数が多い場合に使用すると確認しやすく便利。 ※表示内容の記号については下記別表をご参照。 |
| -v | インデックスに入っているファイルの差分を表示する。 |
| -u [<mode>] | 追跡されていないファイル、つまりバージョン管理対象外のファイルの表示方法を変更する。 |
| -b (–branch) | 「-s」オプションとセットで使用し、ブランチ名も表示する。 |
他のオプションや詳細等については、公式サイトもご確認ください。
「-s」オプションを付けて実行した際に表示される記号について
また、「-s」オプションを付けて実行した際に表示される記号をまとめてみました。
| 記号 | 説明 |
|---|---|
| ?? | gitで管理されていない事を表す。touchで新規ファイルを作成したときなど。 |
| A | インデックスに追加された事を表す。 |
| R | ファイル名が変更された事を表す。 |
| M | (ファイルの)内容が変更された事を表す。 |
| D | 削除された事を表す。 |
| U | 競合中を表す。 |
| (なし) | 変更なし。 |
「??」と表示される例
touchコマンドでindex.htmlを作成後、「$ git status -s」を実行してみます。
# index.htmlを作成
$ touch index.html
# 「-s」を付けて実行。「??」が表示されました!
$ git status -s
?? index.htmlindex.htmlを作成したばかりなので、Gitに認識されていませんね(インデックスに登録されていない)。
git add で、ステージングエリアに追加してあげます。
# ステージングエリアに追加します。
$ git add index.html
# ファイルの状態を確認します。「A」と表示されました!
$ git status -s
A index.html先程まで「??」と表示されていた箇所が、「A」に変更されました。
これでインデックスに追加されたということが確認できました。
「R」と表示される例
上記の続きで、次は「R」と表示される例を見ていきたいと思います。
※上記の続きということで一旦、コミットしておきます。
ファイル名を変更したら「R」になりますよ、というだけですね。
ファイル名を変更する際は、「$ git mv <旧ファイル名> <新ファイル名>」を実行しましょう。
# 一旦、コミットしておきます。
$ git commit -m "index.htmlをコミット"
[master (root-commit) 1a12932] index.htmlをコミット
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
# ファイル名を変更します。
$ git mv index.html index2.html
# 再度、現状を確認。「R」と表示されました!
$ git status -s
R index.html -> index2.html「index.html」を「index2.html」にファイル名を変更したことで、ファイルの状態が「R」、つまりRename状態と認識されました。
「M」と表示される例
上記の続きで、「M」と表示される例を見ていきたいと思います。
index.htmlの内容を変更した後に「$ git status -s」を実行すると、「RM」と表示されます。
# index.htmlの内容を変更します。
$ vi index2.html
※ファイルの内容を変更。
# ファイルの状態を確認します。
$ git status -s
RM index.html -> index2.html
1文字目がインデックスの状態を表し、2文字目がワーキングツリーの状態を表しています。
ファイル名およびファイル内容も変更されていることが確認できました。
「D」と表示される例
上記の続きで、「D」と表示される例を見ていきたいと思います。
※コミットは済ませています。
「$ git rm index2.html」実行後、「$ git status -s」でファイルの状態確認をすると「D」が表示されるのがおわかりになるかと思います。
# index2.htmlを削除します。
$ git rm index2.html
rm 'index2.html'
# ファイルの状態を確認します。「D」が表示されました!
$ git status -s
D index2.html削除されたことを表す「D」が表示されました。
「-u」オプションに付与するモードについて
| モード | 説明 |
|---|---|
| no | バージョン管理対象外のファイルは表示しない。 |
| normal | ファイル及びディレクトリを表示する(ディレクトリ内のファイルは表示しない)。 |
| all | ファイル及びディレクトリ内のファイルを表示する。 |
「no」モードの使用例
Gitのバージョン管理対象外のファイルを表示させたくない場合に使用します。
# ファイルを新規作成してみます。
$ touch test01.txt
# ファイルの状態を確認してみます。
$ git status -s
?? test01.txt
# インデックスされていないファイルは表示しない
$ git status -u no
On branch master
nothing to commit, working tree clean
例えば、ワーキングツリー内でtouchコマンドでファイルを新規作成した場合、git statusコマンドを実行するとファイルの状態が表示されますが、「$ git status -u no」を使えば上記の通り表示されません。
ワーキングツリー内に沢山のファイルがあって、余計なファイルを表示させたくない場合等で使用するかなと思います。

まとめ
git statusは、Gitで現在の状態を確認するための基本コマンドです。
Gitでファイルのバージョン管理をしていると、複数ファイルの現状をパッと把握したいときがあるかと思います。
「$ git status -s」を使ったり他のオプションをいろいろ駆使すれば、効率よく現状を把握できますね。
変更されたファイル、ステージング済みのファイル、未追跡ファイルなどを確認できるため、Git操作では欠かせません。
Gitを安全に使うためにも、まずはgit statusで状態を確認する習慣を身につけるのがおすすめです。
ご参考になれば幸いです。
