どうも。いつもお世話になっているgit addについて色々と興味が湧いていたので、調べました。そのことについて簡単にまとめておきたいと思います。
結論から言うと、色々やってくれています。
git addの色々な意味
結論
git addは指定した内容を、次のコミットに追加するイメージのコマンド。以下のようなことをやってくれている
- ファイルの追跡開始
- ファイルのステージング
- マージのコンフリクト解消済みのマーク付け
ちょっと詳しく
ファイルの追跡開始
まずgit addするとファイルの追跡が開始されます。gitは前のコミットにそのファイルがあったかどうかなどがわかります。
例えば新しくファイルを作ると、追跡されていないファイルができます。git reset したはずなのに、新しく作ったファイルは残っているという場合などを見たことはありませんか?
それはファイルの追跡が開始されていないからです。
git addをすることによって、それらのファイルも追跡を開始するように、指示してあげることができます。そうすると追跡されているファイルに変更があったときに、gitが感知してくれるようになります。
ファイルのステージング
git addによって、指定したファイルをステージング環境にあげることができます。ちなみにステージングってなんで行うかご存知でしょうか?
基本的なステージングの目的は、コミットするファイルの選別が主な目的です。さまざまな変更をしてしまっているときに、特定の変更だけを選別したい時があります。
そんな時に必要な変更だけを選んでステージングしてコミットすることで、わかりやすい作業履歴を残すことができます。
ただですね、ちょっとした反論もあります。実はgit commitでもファイルの選別が可能です。指定したファイルにcommitメッセージをつけることができます。
じゃあなぜgit addがあるのかというと、理由の一つとして、変更内容の保護があげられます。
編集したコードをすぐにステージに移動することで、その後ローカルで例えそのファイルの内容を変更したとしても、ステージング環境にあげたファイルの内容は変更されません。
マージのコンフリクト解消済みのマーク付け
マージだけでなく、rebaseなどでも同じですが、コンフリクトが起こります。その時にコンフリクトを解消したよーと言う解決マークをつけることがgit addにはあります。
コンフリクト解消後にgit addしますよね。あれはステージング環境にあげると言うよりは、コンフリクト解消済みのマークをつけるために行っています。
と言うわけでgit add には色々な意味がありますね。なかなか深いです。ひとつひとつクリアしていきたいものです!では!