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
ag
は grep
の代わりの The Silver Searcher コマンド です。
私の Mac に備え付けの grep
では Perl の正規表現パターン(先読み・後読み)が使えないので、 grep
の代わりに ag
を使っています。
ag
は grep
と同じ -o
( --only-matching
)オプションを認識できて、これを使うと正規表現にマッチした部分だけが返されます。
grep
で Perl の正規表現パターン(= -P
オプション)が使える場合はそのまま grep
を使うとよいかと思います。
$ # 「変更」のみを抽出する(変更を表すフラグは `M` )
$ git status --short | egrep -oP '(?<=^ M ).+$' | xargs git add