はじめに
Gitでファイルのバージョン管理をする際に、現在のファイルの状況をしっかり確認してからコミットなどの作業を進めていく事は大事かと思います。
現在のファイルの状態を確認するコマンドはgit status コマンドになりますが、オプションもいろいろありますので適宜使い分けながら作業していくのが良いのかなと思います。
複数のファイルを修正していると、今どのファイルがどんな状態なのか訳がわからなくなりました。。
そうですね、ファイルの内容を修正しただけなのか、それともファイル名を修正しただけなのか、はたまた削除したものなのかがわからなくなるときがたまにありますよね。
どうしたらいいですか?
git status コマンドを使えば、ファイルの現状(ファイルの変更状態)を把握できますよ。オプションも使えば簡易表示できたりいろいろ便利です。
わかりました。さっそくやってみます!
構文
git status コマンドの基本的な構文は以下になります。
$ 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.html
index.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でファイルのバージョン管理をしていると、複数ファイルの現状をパッと把握したいときがあるかと思います。
「$ git status -s」を使ったり他のオプションをいろいろ駆使すれば、効率よく現状を把握できますね。
ご参考になれば幸いです。
コメント