現在の変更状況を確認しよう
現在の変更状況を確認するやり方について見て行きます。
基本的に開発する時は、どのファイルが変更されたかを確認してからコミットやステージに追加していきます。
なぜかというと、変更されたファイル全てをコミットしてしまうと、まだコミットすべきではなかった変更や、変更途中のファイルまでコミットしてしまうことになってしまいます。
そうならないように、どのファイルが変更されたかをまず確認して、コミットしたいファイルだけステージに追加、もしくはコミットする、そういうやり方をすることをお勧めします。
では、現在の変更状況を確認するコマンドを見て行きましょう。
コマンドは「git status」というコマンドを使います。
$ git status
「git status」と入力することで、変更されたファイルを確認することができます。
図にすると下図のようになります。
ワークツリーとステージの間で変更されたファイル、ステージとリポジトリの間で変更されたファイル、それぞれを表示してくれます。
では「git status」コマンドの裏側で起こっていることを確認していきましょう。
今の状況として「index.html」というファイルを作成して、コミットしたところだと想定します。
まず「git status」コマンドではワークツリーとステージとの間で変更されたファイルを表示します。
それはどういうことかというと、前回ステージに追加した後に変更されたワークツリーのファイルを表示していると言う事です。
「git add」でステージに追加すると「git add」した時点でのスナップショットがインデックスに保存されます。
そのため、インデックスの情報と今のワークツリーの情報を見比べれば、前回ステージに追加した後に変更されたファイルというのが分かるという仕組みになっています。
次に「git status」コマンドで表示する2つめの情報、ステージとリポジトリの間で変更されたファイルというのはどういうことなのでしょうか。
それは前回コミットしてからステージに追加されたファイルということです。
コミットには前回コミットした時点でのスナップショットの情報が保存されています。
ツリーという形で保存されています。
と言う事は、前回コミットした時のスナップショットと、ステージのインデックスの情報を比較すれば、前回コミットした後にステージに追加されたファイルというものが分かります。
この2つを表示しているのが「git status」コマンドです。
色々説明してきましたが、覚えて欲しいことはシンプルに上記の図をイメージとして覚えておいて下さい。
「git status」コマンドではワークツリーとステージの間で変更されたファイルと、ステージとリポジトリの間で変更されたファイル、この2つのファイルを表示していると言うことを覚えておきましょう。
実際にやってみよう
では、ターミナルを立ち上げて、実際に確認してみます。
「git status」と入力します。
$ git status On branch master nothing to commit, working tree clean
すると、今はコミットすべき変更は何もないよと表示されています。
ではファイルに変更を加えていきましょう。
「index.html」をエディタで立ち上げます。
「<p>git status</p>」と追記してみましょう。
追記したら保存します。
保存したらターミナルに戻ります。
ターミナルに戻ったら、再度「git status」と入力してみましょう。
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.html no changes added to commit (use "git add" and/or "git commit -a")
するとステージに追加されていない変更があるよと表示されています。
どのファイルが変更されたかというと「index.html」が変更されたと言われています。
では、これを今度はステージに追加していきます。
$ git add index.html
再度「git status」コマンドで確認してみます。
$ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: index.html
するとまた表示の内容が変わります。
今度はコミットすべき変更があるよと言われています。
つまりステージに追加したけどコミットしていない変更があるよと言われています。その変更というのが「index.html」です。
ではここまで来たら実際にコミットしてみます。
$ git commit -m 'git statusコマンドを追記' [master ea39381] git statusコマンドを追記 1 file changed, 1 insertion(+)
最後にもう一度「git status」コマンドで確認してみます。
$ git status On branch master nothing to commit, working tree clean
するとコミットすべき変更は何もないよと言われています。
コミットしましたので、ワークツリーとコミットの間に変更差分はない状態です。
このようにファイルを変更したら「git status」コマンドを打って、何のファイルが変更されたかを確認してから「git add」や「git commit」をする癖を付けましょう。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール