概要
どうもこんにちは。既視感のあるタイトルです。(以前に似たようなタイトルの記事を書いたせいですね。)
今日は久しぶりの 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
の概要はだいたいつかめたかと思います。
-s
オプションについて
さてタイトルの件に戻ってきました。-s
は --short
のエイリアスです。short ということでその名のとおり短い書式で表示してくれるオプションです。先ほどのキャプチャと同じ状況で今度は -s
を付けてみます。すると以下のように表示されます。
うお、みじかっ!
バカな、短すぎて説明用のテキスト画像を挿入する隙間もなかったぜ…
ざっくり補足します。
表示 | 説明 |
---|---|
M_ |
git add されているけどまだ git commit されていないファイルの一覧 |
_M | 編集・変更・削除されているが、まだ git add されていないファイルの一覧 |
?? | Git管理されていない、かつ .gitignore で管理除外対象にもされていないものの一覧 |
ということですね。
変更ファイルが多い作業になってくると git status の出力結果も地味に長くなるので、そんなときにはこのオプションを使うとちょっと作業が楽になるかもしれません。**特に VScode で開発している方は、統合ターミナルの限られた表示領域で git status
したときにこそこのオプションが真の力を発揮できると思います。**ぜひおためしください。
ちなみにショートフォーマット時の詳しい書式は下記に載ってますので興味のある方はご覧ください。
おまけ
他にもいろいろオプションがあります。気になったものをいくつかおまけ的につまんでみます。
-b
(--branch
)
現在のブランチ情報を表示するオプションです。なんですが、-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^)/
まあ実際使ってみればわかるでしょう、ということでコマンド打ってみました。
あれ、 -s
オプション実行時と書式は同じですね。色が消えましたが。すみませんが用途はいまひとつわかりませんでした。**-s
でええやん。**というのが正直な感想です。
-v
(--verbose
)
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 でエントリを終了します、って書いてあるようです。改行が全部なくなるってことでしょうか。コマンドを打って確認してみます。
ほんとに改行全部なくなりました。
極限に短い 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)
が地味に便利なので知らなかった人はつかってみてくださいって記事を書こうとしただけのはずだったんですが、気がついたらおまけのほうが長くなってました(ありがち
ではまた。