git add するときの便利なオプションを2つ

tomon
2024-09-18
2024-09-18

【1】addで登録されるはずのファイルを確認する。「-n」.

新しいファイルをワークツリーに登録したい。
けど、git add .としたとき、どのファイルが登録されるのか事前に確認したい、というときに使います。

いきなりaddすると
バックアップファイルや設定ファイルやgit管理下に置きたくないファイルや混じってしまって
あとでそれをはずすのも面倒だな、というとき、あらかじめ -n をつけて実行し、確認しておけます。

例:

以下のような構造として、どのファイルもgit管理下にないとします。


$ tree -a
.
├── .env
├── .git
├── 1.txt
├── 2.txt
└── img
    └── title.gif
こんなとき
$ git add -n .
add '.env'
add '1.txt'
add '2.txt'
add 'img/title.gif'

上が実行結果です。一覧で表示されるだけで、実際にはadd(インデックスに追加)されていません。


【2】インタラクティブにaddを実行する。「-i」

このオプションではaddするファイルをインタラクティブ(対話型)に選択できます。
git add のあとにファイルを羅列してもいいのですが、ファイル数が多いと面倒ですよね。
これを使えば、addする対象ファイルの候補をリストアップしてくれてその中から番号で選んでやればよい。
更新したファイルが多い、その中でいま、addしたいものと、したくないものがある、
とかいうときに便利です。


$ tree -a
.
├── .env
├── .git
├── 1.txt
├── 2.txt
└── img
    └── title.gif

# 上のようなファイル構造とします。
# どのファイルもgit管理下にないとします。

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .env
        1.txt
        2.txt
        img/

$ git add -i

# とすると、インタラクティブに(対話型で)以下のように聞いてきます。

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now>     

# ここで、どれを選ぶか入力待ち状態となります。
# 4: add untracked を選択してみます。
What now> 4

#すると次のように候補が上がります。


           staged     unstaged path
  1: .env
  2: 1.txt
  3: 2.txt
  4: img/title.gif
Add untracked>> 2       # 入力待ちになりますが、2( 1.txt)を入力します。1.txtがaddされます。

# addされたものに「*」がついて、再度、候補のファイル一覧が表示されます。

           staged     unstaged path
  1: .env
* 2: 1.txt
  3: 2.txt
  4: img/title.gif
Add untracked>> 3       # 入力待ちになったところで、3の 2.txtを選択したところ。3.txtがaddされます。
           staged     unstaged path
  1: .env
* 2: 1.txt
* 3: 2.txt
  4: img/title.gif

Add untracked>>
added 2 paths

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now> q             # 入力待ちに、qを入力して抜けます。
Bye.

$ git status       # 状態を確認
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   1.txt
        new file:   2.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .env
        img/

# git add -i でインタラクティブに設定した通りの結果になっています。


addしたいファイル数が多いとき、addしたいファイルのパスが長くて、入力するのが面倒なときとか便利です。

add untracked を例として挙げましたが、もちろん、updateも使えます。