https://zenn.dev/helloyuki/articles/d2fd49db43fcea

git add [ファイル名] あるいは git add . くらいしか今まで使ってきませんでした。しかしこの前ふと、「ファイルのこの部分だけはコミットしたいんだけどな〜」と思い調べてみたところ、git add には対話モードなる機能があることを知りました。お恥ずかしながら、実ははじめて知りました。使い方をまとめておきます。

対話モードの始め方

ターミナル上で下記のように入力します。

# ショートハンド
git add -i
# すべて記述
git add --interactive

すると、対話モードが開始されます。対話モードでは、git statusと似た「どのファイルがステージに追加されているか・されていないか」といった情報と、この対話モードで実行できるコマンドの一覧が表示されています。

❯ git add -i
           staged     unstaged path
  1:    unchanged        +4/-0 Cargo.lock
  2:        +1/-0      nothing Cargo.toml

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

What now>

status は git status とほぼ同等の目的を達成できますが、ステージした変更が左側、ステージしていない変更が右側に表示されます。直感的ですね。

update は、実行後ファイルを選択してステージに追加できます。git add をそのまま起動すると、個別のファイルを指定する際にはフルパスをコピー&ペーストする必要があるかと思いますが、update コマンドを利用すると番号の指定のみで済ませられ簡単です。

revert はファイルのステージを取り消します。git reset する際と同等の動きをします。全部を reset したいわけではない際に有効そうです。revert というとコミットの revert を思い浮かべてしまうのですが、そうではなく add という行為の revert (巻き戻し)のことのようです。

add untracked はまだ git でトラックされていないパスをステージに追加できます。新規ディレクトリやファイルを作成し、git add を実行すると untracked files というリストを見られるはずです。それをステージすることができます。

patch はファイルの一部をステージすることができる機能です。add コマンドには実は git add -p というパッチモードが存在するのですが、これを呼び出します。普通に add コマンドを実行しただけでは「ファイル単位での add」しか管理できませんが、p オプションはブロック単位(ハンクと呼ばれます)をサポートしています。

diff は git diff と同等です。これからコミットされる予定のものを確認するためのコマンドです。

対話モードのコマンドの使い方

対話モードのコマンドの使い方には流れがあります。次の通りです:

  1. 使いたいコマンドを選ぶ。
  2. 各コマンドの操作をする。
  3. 何も入力せず Enter を押す→対話モードのホームに戻る。
  4. 次の作業をする場合はこの手順1で使いたいコマンド選ぶ。終了したい場合はquitを選ぶ。