LoginSignup
134
87

More than 3 years have passed since last update.

git status -s でちょっと幸せになれる

Last updated at Posted at 2019-03-05

概要

どうもこんにちは。既視感のあるタイトルです。(以前に似たようなタイトルの記事を書いたせいですね。)

今日は久しぶりの Git 系の記事いってみます。タイトルのとおりお題は git status についてです。 Git を使ったことのある方々にはお馴染みのコマンドかと思います。

git status って?

軽く説明します。釈迦に説法と思われた方は読み飛ばしてください^^;
公式ドキュメントでは以下のように説明されています。

Displays paths that have differences between the index file and the current HEAD commit, paths that have differences between the working tree and the index file, and paths in the working tree that are not tracked by Git(and are not ignored by gitignore).

上記を踏まえて簡単にまとめますと 下記3点を表示するコマンドが git status と言えます。

  • git add されているけどまだ git commit されていないファイルの一覧
  • 編集・変更・削除されているが、まだ git add されていないファイルの一覧
  • Git管理されていない、かつ .gitignore で管理除外対象にもされていないものの一覧

実際のプロンプト表示はこのようになります。
git_status_before.png
こんなかんじです。git status の概要はだいたいつかめたかと思います。

-s オプションについて

さてタイトルの件に戻ってきました。-s--short のエイリアスです。short ということでその名のとおり短い書式で表示してくれるオプションです。先ほどのキャプチャと同じ状況で今度は -s を付けてみます。すると以下のように表示されます。
git_status_after.png
うお、みじかっ!
バカな、短すぎて説明用のテキスト画像を挿入する隙間もなかったぜ…
ざっくり補足します。

表示 説明
M_ git add されているけどまだ git commit されていないファイルの一覧
_M 編集・変更・削除されているが、まだ git add されていないファイルの一覧
?? Git管理されていない、かつ .gitignore で管理除外対象にもされていないものの一覧

ということですね。
変更ファイルが多い作業になってくると git status の出力結果も地味に長くなるので、そんなときにはこのオプションを使うとちょっと作業が楽になるかもしれません。特に VScode で開発している方は、統合ターミナルの限られた表示領域で git status したときにこそこのオプションが真の力を発揮できると思います。ぜひおためしください。

ちなみにショートフォーマット時の詳しい書式は下記に載ってますので興味のある方はご覧ください。

おまけ

他にもいろいろオプションがあります。気になったものをいくつかおまけ的につまんでみます。

-b(--branch)

git_status-branch.png
現在のブランチ情報を表示するオプションです。なんですが、-s等の簡易表示オプションと一緒に使わないと何もおきません。まてあわてるなこれは孔明の罠だ(死語

ということで -s オプションと併用して -sb と指定してます。

ちなみに公式には記載がちゃんとありました。罠とか言ってごめんなさい。

Show the branch and tracking info even in short-format.

とにかく -s-b は常時セットで使うとよさげなのでおすすめします。ブランチ名あっても邪魔にはなりませんしね。

-u(--untracked-files)

untracked files の表示有無を切り替えられるオプションです。
https://git-scm.com/docs/git-status#Documentation/git-status.txt--ultmodegt

書式
git status -u<mode>
mode 説明
no untracked files は表示しない
normal デフォルト。つまり -u オプションなしと同じ
all untracked files のディレクトリ内まで細かく表示

例えば untracked files は表示したくない場合はこんなかんじです。-uno のように オプションと mode はスペースを空けずに続けて書いてください。

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

    modified:   a.txt

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

    modified:   b.txt

Untracked files not listed (use -u option to show untracked files)

以下のように -s-bオプションと組み合わせると便利です。

$ git status -sbuno
## master
M  a.txt
 M b.txt

--porcelain

公式によると Porcelain = 磁器って書いてあります。読んでみましたが、正直よくわかりませんでした\(^o^)/

まあ実際使ってみればわかるでしょう、ということでコマンド打ってみました。

gitstatus-porcelain.png
あれ、 -s オプション実行時と書式は同じですね。色が消えましたが。すみませんが用途はいまひとつわかりませんでした。-s でええやん。というのが正直な感想です。

-v(--verbose)

gitstatus-v.png
git diff の結果も一緒に表示してくれるオプションです。あまり使うことはなさそうですが、覚えておくと何かの際に役立つこともあるかもしれません。(あるとは言ってない)

-z

聞きなれないオプションです。とりあえず公式ドキュメントをみてみます。

Terminate entries with NUL, instead of LF. This implies the --porcelain=v1 output format if no other format is given.

改行コード(LF)の代わりに NUL でエントリを終了します、って書いてあるようです。改行が全部なくなるってことでしょうか。コマンドを打って確認してみます。
gitstatus-z.png
ほんとに改行全部なくなりました。
極限に短い git status 表記を目指すのであれば -z オプションを使えば最短になりますね。あと、-b-z はもちろん併用可能なので、git status -bz夢のB'zオプションが実現できます。すみません、ふざけすぎました。

これもどういう使い道があるんでしょうかね?ご存知の方いらっしゃいましたらぜひご一報ください。

2019/6/29追記:
@sounisi5011 さんから -z の用途についてすごく有用なコメントをいただきました。ありがとうございます。
https://qiita.com/tommy_aka_jps/items/af536a7c20747f99aa42#comment-4960d1add337965d1620

おわりに

git status -s(b) が地味に便利なので知らなかった人はつかってみてくださいって記事を書こうとしただけのはずだったんですが、気がついたらおまけのほうが長くなってました(ありがち

ではまた。

134
87
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
134
87