0から解説!git addコマンドを使ってファイルを登録してみよう

Gitを使い始めた人もそうでない人もこんにちは!

Git初心者の方の場合、

Gitを使い始めたけど仕組みがよくわからない
ワーキングツリー?インデックス?リポジトリ?もうわけがわからない
Gitでファイルをインデックスに登録?難しくてどうしたらいいのかわからないよ・・・

といったことはありませんか?

また、ある程度Gitを使っている方でも

  • Gitでインデックスに追加する方法
  • インデックスへの一括登録
  • addコマンドでファイルを間違ってインデックスに登録

といった経験はないでしょうか!? 今回解説する記事ではこういった疑問や悩みをわかりやすく丁寧に解説し解決していきたいと思います! Gitを始めたばかりの人から、慣れてきた人まで読んでいただける記事ではないかと思います!

※使い方だけ知りたい人はgit addコマンドとは?をご覧ください

git addを知る前に知っておこう!

まず、git add について解説する前にそもそもGitとはなにか、Gitを使ってファイルを登録する動きや流れについて解説していきたいと思います。もしここはわかってるから必要ないよと言う人は次のgit addコマンドとは?まで読み進めて頂いて構いません!

Gitとは?

まずGitとはなにかですが、一般的には「バージョン管理ソフト」と呼ばれる部類のものになります。ざっくり簡単に表現すると「様々なファイルの追加・編集・削除などの内容を保存しておき、別のコンピュータでも同じ状況を再現することができる」ものだと考えていただくのが良いかと思います。

これでもわかりづらいですかね? 例えば、小説を書いていたとします。途中から大幅に内容を変更したい場合、一度ファイルのバックアップをとってから大幅に内容を変更することがあるかと思います。

しかし、この内容を変更するたびにファイルのバックアップが増えていきます。また、バックアップが増えていくとファイルの数が多くなるためあとからロールバック(巻き戻し)したい場合は手動で検索するなりとても面倒で手間がかかってしましますよね?

Gitを使うことで変更をしてもあとから特定の編集地点までロールバックすることができるようになります。この際にファイルのバックアップを手動で取る必要はありません。普段は家のPCで作業していてたまに気分転換するためにカフェでノートPCで作業するとします。

このときにもGitのリモートリポジトリと呼ばれる場所にファイルがアップされていれば(これはコマンドでファイルを登録するようなイメージです。)、カフェでノートPCで作業する際にも家で作業していた内容をそのまま利用することができます。

【5分でわかる】GitHubとは?概要やメリットを簡単解説!
更新日 : 2019年8月9日

仕組みがわからない?

次に、今回の記事のメインテーマである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 -ugit 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を使っていきましょう!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

オータケ

オータケ

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説