git addって意味ある?必要性を理解するためstagingから調べ直した

git addって意味ある?必要性を理解するためstagingから調べ直した

チーム開発をする上で、バージョン管理のツールとしてgitを使用している会社も少なくないかと思います。

多くの人はあまり感じないかもしれませんが、僕はgitの学習を進めている中で

「git addって意味ある?addなしでcommitできた方が楽だし早いじゃん」

と思っていました。

しかし、gitの概念を理解していくと「git addはコミットログを綺麗にするためにも必須のコマンド」と認識するようになってきました。

今回は、学習の備忘録もかねて、

  • gitのステージングの概念
  • git addの意味と必要性

についてお話していきます。

目次

git addの意味は反映したい修正を選ぶこと

git addがどんな役割を果たしているか?を理解するためにはgitのstagingについて理解する必要があります。

そこで、ローカルリポジトリの3つの作業エリアについてお話します。

gitにおける3つの作業エリア

gitにはステージという概念があります。gitの公式ページを引用してまとめると以下のようになります。

  • 作業ディレクトリ・・・現在編集を行っているファイルの集まり
  • ステージング・エリア・・・何をcommitするか選ばれたファイルの集まり
  • Gitディレクトリ・・・commitされたファイルの集まり。remoteにpushすると反映される。

これを図解すると以下のようになります。

画像

つまり、リモートリポジトリに反映できるのはcommitされた変更のみと言えます。

言い換えると git add はリモートに反映したい変更を自分で選ぶことができるコマンドというわけなのです。

git add で必要な修正のみcommitを行う

とはいえ、「自分が今回行った修正は全て本番に反映する」ことを前提とするなら、やはり git add は不要なように思われます。

そこで、必要になってくる考え方が、commit log を綺麗にしようという考え方です。綺麗なコミットログとは、1つのcommitに含まれる修正は1つだけの状態です。

しかし、実際の業務をしていると「このファイルを編集するなら、ついでにバグも直してしまおう」と修正を加えたいときもあるでしょう。

仮にこのとき別のバグが発生しまうと、1つのcommitに2つの編集が加えられているのでcommitを戻す処理が難しくなります。

そこでgit addをすることによって、1つのコミットに必要なコミットだけをすることで、コミットログを綺麗にすることができるのです。

git addはcommitログをきれいにするための手段

git addを加えることによってcommitの粒度を明示的に決めることができます。

remoteに自分の編集を反映させるという意味では確かにaddは不要です。

しかし、commit logがきれいであればサービスを運用するにあたって後から見直したときに「どこで」「どういう処理を」加えているのか明確になります。

そのためにaddコマンドがあるというわけなのです。

実際にgit addがコンソールでどう動くかを確認する

概念はなんとなくわかってきたものの、実際にコンソールを通してどのように見えるかも確認していくことにしましょう。

ステージング・エリアのディレクトリ状況を確認する

ステージング・エリアにおいて、作業ディレクトリと比較してどれほどファイルが反映されているか確認するためには、

git status

コマンドを実行します。

画像
画像

上記のコマンドを打ち、緑色で表記されている index.html が自分の作業ディレクトリと同じ状態にあるファイルです。

赤い文字で modified: と書かれているファイルは自分の作業ディレクトリのみで変更されている内容で、ステージング・エリア以降には含まれていない修正になります。

Gitディレクトリの状況を確認する

Gitディレクトリの反映状況を確認するのは少し面倒な方法になります。Gitディレクトリの変更状況を調べるためには、

git log

で過去のcommitログを見ます。

その上で、自分が変更を見たいcommit idを見つけた上で

git diff [commit id] [その直前のcommit id]

を打つことで自分が以前のcommitから、どのファイルに変更を加えたかを見ることができます。

まとめ

今回はgit addの意味について調べてみました。

1年実務をやった今ならgit addの重要性もわかりますし、綺麗なcommit logを残すことがいかに重要かも理解できます。

この記事を読んでgitのさらに理解が深まればと思います。

関連記事

コメント

コメントする

目次