Gitを使い始めた人もそうでない人もこんにちは!
Git初心者の方の場合、
ワーキングツリー?インデックス?リポジトリ?もうわけがわからない
Gitでファイルをインデックスに登録?難しくてどうしたらいいのかわからないよ・・・
といったことはありませんか?
また、ある程度Gitを使っている方でも
- Gitでインデックスに追加する方法
- インデックスへの一括登録
- addコマンドでファイルを間違ってインデックスに登録
といった経験はないでしょうか!? 今回解説する記事ではこういった疑問や悩みをわかりやすく丁寧に解説し解決していきたいと思います! Gitを始めたばかりの人から、慣れてきた人まで読んでいただける記事ではないかと思います!
※使い方だけ知りたい人はgit addコマンドとは?をご覧ください
git addを知る前に知っておこう!
まず、git add について解説する前にそもそもGitとはなにか、Gitを使ってファイルを登録する動きや流れについて解説していきたいと思います。もしここはわかってるから必要ないよと言う人は次のgit addコマンドとは?まで読み進めて頂いて構いません!
Gitとは?
まずGitとはなにかですが、一般的には「バージョン管理ソフト」と呼ばれる部類のものになります。ざっくり簡単に表現すると「様々なファイルの追加・編集・削除などの内容を保存しておき、別のコンピュータでも同じ状況を再現することができる」ものだと考えていただくのが良いかと思います。
これでもわかりづらいですかね? 例えば、小説を書いていたとします。途中から大幅に内容を変更したい場合、一度ファイルのバックアップをとってから大幅に内容を変更することがあるかと思います。
しかし、この内容を変更するたびにファイルのバックアップが増えていきます。また、バックアップが増えていくとファイルの数が多くなるためあとからロールバック(巻き戻し)したい場合は手動で検索するなりとても面倒で手間がかかってしましますよね?
Gitを使うことで変更をしてもあとから特定の編集地点までロールバックすることができるようになります。この際にファイルのバックアップを手動で取る必要はありません。普段は家のPCで作業していてたまに気分転換するためにカフェでノートPCで作業するとします。
このときにもGitのリモートリポジトリと呼ばれる場所にファイルがアップされていれば(これはコマンドでファイルを登録するようなイメージです。)、カフェでノートPCで作業する際にも家で作業していた内容をそのまま利用することができます。
仕組みがわからない?
次に、今回の記事のメインテーマであるgit addコマンドを使うためにGitの仕組みを簡単に把握しておく必要があります。仕組みと言っても図でわかりやすく解説するので構える必要はありませんよ!
まず、Gitには
- ワーキングツリー
- インデックス
- ローカルリポジトリ
- リモートリポジトリ
といった場所が4つあります。
この4つの場所を使うことで先程の項で解説したファイルの追加・変更・削除などの情報を登録できたり、別のPCからも同じ環境を再現できたりします。
ワーキングツリー
まず、ワーキングツリーについてですがgit initコマンドを使って初期化した場所になります。git initコマンドを使うことで「これからこのフォルダをGitでバージョンの管理をしますよ」という宣言になります。
インデックス
次にワーキングツリー内にあるファイル達をインデックスという場所に登録する必要があります。
と思うかもしれません。なぜかというと、このあと解説するローカルリポジトリという場所に情報を登録するときにインデックスという場所に登録されているファイル(の変更内容)をローカルリポジトリに登録します。
※ちなみにワーキングツリーにファイルを作った段階ではインデックスに登録されません
ワーキングツリーからインデックスにファイルを登録するためにgit addコマンドを使います。この記事はそのインデックスに登録するためのお話です。
ローカルリポジトリ
次の段階としてファイルの中身を追加・変更行った場合はコミットという作業を行います。これを行うことでいつ、誰が、どのファイルを、どんな内容で追加・変更を行ったかが記録されます。
この記録される場所がローカルリポジトリという場所になります。(図でいうと左下のリポジトリという場所になります。)
「過去どんな変更を行ったか」「作業をロールバックしたい」といったことが実現できるようになります。この記事では解説しませんが、git commitというコマンドを使うことでローカルリポジトリに情報を記録することができます。
リモートリポジトリ
ワーキングツリーからローカルリポジトリまでが個人のPCの中に存在しているものだと思ってください。しかし、先程の項で例として出した「家で作業した内容」を「カフェでノートPCに同じ状況を再現」したい場合はこのままではできません。
なぜなら、ワーキングツリーからローカルリポジトリまでは家のPC内に存在しているからです。このローカルリポジトリに記録されている情報を出先のカフェでも使えるようにしなければなりません。
どうやって使えるようにするかというと、ローカルリポジトリ自体をリモートリポジトリという場所に登録することで実現できます。リモートリポジトリはGitHubといったサービスや自分または他人が用意したGitサーバーというサーバー上に存在します。
サービスのアカウントまたはサーバーがない場合はローカルリポジトリをリモートリポジトリにアップすることはできません。ここでリモートリポジトリにアップすることをプッシュといいます。とても簡単な説明ではありますが、Gitの仕組みはこのような形になっています。
git addコマンドとは?
ワーキングツリーにあるファイルをインデックスに登録するためにgit addというコマンドを使っていく必要があります。git addコマンドの使い方を見ていきましょう。
git add XXXXX
XXXXはファイル名を入れてくださいね。これで指定したファイルをインデックスに登録することができます。
しかし、この場合だとワーキングツリーにファイルが20個も30個もあった場合は1個ずつ登録していくことになり大変非効率です。同じ階層のファイルをまとめて登録するには次のようにします。
git add .
「.」をつけるだけでその階層のファイルをまとめてインデックスに登録することができます。このgit addはファイルを変更・削除しローカルリポジトリに記録する場合も毎回行わなければなりません。それも1つ1つ手動でやるのはとても面倒です。
そのため-uコマンドを使うことでローカルリポジトリと比較して変更(または削除)したファイルがあったものだけaddするという便利なオプションがあります。
git add -u
uはupdateの省略形の意味です。そしてgit add -uとgit add .の2つをまとめてやるためのオプションもあります。
git add -A
この-Aオプションを使うことで2つをまとめた意味になります。これでgit addの解説はおわりです。もし、間違ってaddしてしまった場合はどうすればよいでしょうか?
次の章で解説していきますね!
間違ってgit addした場合はどうすればいいの?(reset)
もし、間違ってaddしてしまった場合になかったことにしたい場合は次のコマンドを使用することでなかったことにできます。
git reset HEAD XXXX
XXXXはファイル名を指定してくださいね。resetというコマンドを使うことで取り消すことができます。とても簡単ですよね?
まとめ
いかがでしょうか? Gitは使いこなせるととても便利ですが、初心者の方が仕組みを把握するのは少し難しい部分もあるかと思います。わからなくなったらまた図をみながら順を追って理解していってくださいね。
インデックスに登録する場合は、git addを、取り消す場合はgit resetを使っていきましょう!