あいさつ
今回初めてQiitaに記事を投稿しています。新卒エンジニアのりくとです。
経歴としては大学院卒で研究では人工知能の基礎研究をやっていて、インターンではセキュリティ系の会社で1年弱業務に携わらせてもらっていました。
入社してからは日々いろんなことを知り、身に着けていっている最中なのでここから技術をもっと身に着けて、最終的には個人のアプリを作れたらと思っています!
趣旨
さて、今回、皆さんに共有したい内容としてはgit add .とインタラクティブモードについて話していこうかと思っています。この記事は入社してある程度Gitの操作に慣れてきた人向けの記事ですので、まったくの初心者の方はこちらの記事などを見てからのほうが良いかもしれません。
Gitに慣れ始めると便利だな反面、毎回ファイルのパスを指定してするの面倒だからadd .で全部ステージングに上げちゃおうと思ったことありませんか?
そんな方にこの記事ではgit add .とそれを回避するために便利なインタラクティブモードについて解説していこうと思います。
本題
git add .
まず最初に紹介するのが、git add .です。これは変更されたファイル(新規作成、変更、削除)をまとめてステージングに上げるという操作です。
現状では何も問題ないように見えますよね?
しかし、これは個人のみで開発しているから問題なく見えるのです。
複数人で作業している場合を想像してみてください。クローンしてきてから、個人で使いやすいように環境をカスタマイズしている場合、その情報をすべてステージングに上げ、pushしてしまい、それがマージされてしまうと、ほかの人の環境にもそれが反映されてしまい、ほかの人が使いづらくなってしまったり、最悪、本番環境が動かなくなってしまうこともあります。
このような状況を起こさないためにも、git addはちゃんとどのファイルを上げるか考えたうえで行うべきなのです。
でも、10や20ファイルを作成してあって、それをまとめてあげるからいちいちパスを指定するなんてめんどくさいし間違えそうという方にお勧めの方法があります!
git add .の回避策
git add -i
このオプション-iはインタラクティブモードという意味で、文字通り、対話的にどのファイルをステージングにあげるかを決めることができます。
では、実際の操作方法について解説します。
現在、以下のようなファイル構成で、ステージングには何も入っていません。

ここからgit add -iを使って、practiceX.txtのX=1,2,3をまとめてステージングに上げたいと思います。
- まず
git add -iを行います。
すると以下のような選択肢が出ます。
1: status (ステージングの状況を確認できる)
2: update (選択したファイルをステージングする)
3: revert (ステージングされているファイルをもとの内容に戻す)
4: add untracked (未追跡ファイル(新規ファイルなど)を選択的にステージングする)
5: patch (ファイル内の特定部分だけをステージングする。部分的にコミットしたいときに使える)
6: diff (ステージング前ファイルの変更差分を確認できる)
7: quit (インタラクティブモード終了)
8: help (インタラクティブモードの説明)
- 今回は新しく作成したファイルをステージング環境に上げたいので4を選択します。そうしたら、未追跡のファイルが候補として並んでいる状態が出てきました。ここから1,2,3のpracticeファイルをステージング環境に上げたいと思います。
- 操作は簡単でコマンドラインにaddしたいファイルに対応する数字を打つだけ!!
では実際にこれがステージング環境に上がっているのか確認したいと思います。インタラクティブモードを終了して`git status`で確認します。
ちゃんと指定したファイルだけがaddされていることが確認できました!!
このようにいちいちパスを指定しなくても視覚的にわかりやすく、操作のしやすいオプションがあるのでぜひ試してみて下さい。
ちなみに、これすらめんどくさいという人は特定のフォルダまでのパスを指定してそれ以下をワイルドカードでaddしてしまうやり方やignoreファイルを作って、特定のファイルやフォルダはgit add .の対象外にするみたいなやり方もあります。 自分が使いやすいやり方をみつけてみてください。
おわりに
今回はgit add .の危険性とその回避方法について触れました。コマンドやオプションは慣れれば便利ですが、使い方によっては余計な手間をかけることになったり、時間を無駄にしてしまう原因にもなったりしてしまいます。そのような事態を招かないためにも、正しい知識を身に着けて、自分が効率よく仕事をするためのツールとして使っていきましょう!




