Git で管理下にあるファイルのみをステージングする方法

Git リポジトリで、新しいファイルは追加せずに、すでに Git で管理されているファイルの変更及び削除のみをステージングする方法です。 ファイルを選り分けてひとつずつ add するのが億劫なときに便利です。

確認時の Git のバージョンは 2.18.0 です。

新しいファイルは除外して、 Git 管理下のファイルの変更のみを追加する:

$ # 次の 2 つは同じ意味です
$ git add -u .
$ git add --update .

ちなみに、「変更」と「削除」のどちらかだけをまとめてステージングする方法は見つかりませんでした。 どうしてもやりたい場合は git status で一覧を出力して、そのうち対象のものだけを抽出し xargs で追加する形になるものと思います。

$ # 「変更」のみを抽出する(変更を表すフラグは `M` )
$ git status --short | ag -o '(?<=^ M ).+$' | xargs git add
$ # 「削除」のみを抽出する(変更を表すフラグは `D` )
$ git status --short | ag -o '(?<=^ D ).+$' | xargs git add

aggrep の代わりの The Silver Searcher コマンド です。 私の Mac に備え付けの grep では Perl の正規表現パターン(先読み・後読み)が使えないので、 grep の代わりに ag を使っています。 aggrep と同じ -o--only-matching )オプションを認識できて、これを使うと正規表現にマッチした部分だけが返されます。

grep で Perl の正規表現パターン(= -P オプション)が使える場合はそのまま grep を使うとよいかと思います。

$ # 「変更」のみを抽出する(変更を表すフラグは `M` )
$ git status --short | egrep -oP '(?<=^ M ).+$' | xargs git add