git statusはファイルを追加する前やコミットした後、Git Bashの起動直後などgitコマンドの中でもよく使うコマンドであるが、シンプルなフォーマットで表示するオプションがある。

通常フォーマット

git statusを普通にオプションなしで実行すると

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   b.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    dir1/d.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        a.txt

こんな感じで非常に長い。

ショートフォーマット

シンプルな短いフォーマットで出力するにはgit status -sを使う。

$ git status -s
M  b.txt
 D dir1/d.txt
?? a.txt

違いは歴然で圧倒的に短い。

1文字目がインデックスの状態、2文字目が作業ツリーの状態をアルファベットで表す。 アルファベットの意味は以下の通り。

アルファベット 意味
M 変更
A 追加
D 削除
R ファイル名変更
U 競合
? 未追跡

未追跡ファイルは??、競合ファイルはUU

ブランチ情報も出力

ローカルブランチとリモート追跡ブランチの情報も短いフォーマットで出力できる。

-bをつける。

$ git status -sb
## master...origin/master
 M content/post/git_20170528.md
 M content/reading_list.md

最初の行に表示されるのがブランチの情報で、ローカルブランチとリモート追跡ブランチの状態によって表示内容が変わる。

表示内容は以下の3パターンがある。

表示内容 ローカルブランチの状態
## master…origin/master リモートと同期している
## master…origin/master [behind 1] リモートより古い(遅れている)
## master…origin/master [ahead 1] リモートより新しい(進んでいる)

behindやaheadの後の数字はコミット数を表す。

git statusのエイリアス

git status -sbを毎回入力するのは面倒なので、以下のようなエイリアスを設定すると手間が省ける。

$ git config --global alias.st "status -sb"

以下のようにラクチンになる。

$ git st
## master...origin/master
 M content/post/git_20170528.md
 M content/reading_list.md