← ブログ一覧

git commit -am で add を省略できる?使い方と注意点

git commit -am を使えば、毎回 git add してから git commit する2ステップを1コマンドで完了できます。実は git commit コマンドには -a オプションがあり、これが追跡済みファイルの変更を自動的にステージングしてくれます。ただし、新規ファイルは対象外という注意点があります。

この記事のまとめ

git commit コマンドは -a オプションで add 機能も持っており、追跡済みファイルの変更を自動的にステージングしてからコミットできます。これにより、毎回2ステップ(add → commit)を踏む手間が省けます。

  • -a オプションは git addgit rm を自動実行する
  • 新規ファイル(untracked files)は対象外
  • -m オプションと組み合わせて git commit -am "message" で使用

この記事の情報源

この記事は、以下の情報源に基づいています。重要な判断をする際は、必ずこれらを直接ご確認ください。



git commit -am とは?commitでaddもできる

git commit コマンドは -a オプションで、ステージング(git add)とコミットを1コマンドで実行できます。これは git addgit rm を自動的に実行してからコミットする機能です。

Git公式ドキュメントでは、以下のように説明されています。

Automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

出典: Git - git-commit Documentation

-a オプションの役割

-a オプション(--all の短縮形)は、追跡済みファイルの変更を自動的にステージングします。具体的には、修正されたファイルには git add を、削除されたファイルには git rm を自動的に実行します。

ただし、Git がまだ認識していない新規ファイル(untracked files)は対象外です。

-m オプションの役割

-m オプション(--message の短縮形)は、コミットメッセージをコマンドラインで直接指定できます。このオプションを使わない場合、テキストエディタが開いてメッセージを入力する形になります。

2つを組み合わせた -am

-a-m を組み合わせた -am オプションを使えば、ステージングとコミットメッセージ指定を1行で完結できます。これが最も効率的な使い方です。

基本的な使い方

git commit -am の基本的な使い方を、具体例を交えて解説します。

基本構文

git commit -am "commit message"

この1行で、追跡済みファイルの変更をステージングしてからコミットまで完了します。

使用例

Git公式ドキュメントに記載されている例を見てみましょう。

$ edit hello.c
$ rm goodbye.c
$ git commit -a

この例では、hello.c を編集し、goodbye.c を削除した後、git commit -a で両方の変更を自動的にステージしてコミットしています。

実際には -m オプションも組み合わせて、以下のように使います。

$ edit hello.c
$ rm goodbye.c
$ git commit -am "Update hello.c and remove goodbye.c"

従来の方法との比較

従来の方法では、2ステップが必要でした。

# 従来の方法(2ステップ)
$ git add .
$ git commit -m "commit message"

-am オプションを使えば、これが1ステップで完了します。

# -am オプション(1ステップ)
$ git commit -am "commit message"

特に細かい変更を頻繁にコミットする場合に便利です。

どのファイルがコミットされる?対象範囲を理解しよう

-a オプションがどのファイルを対象にするかを正確に理解しておくことが重要です。対象は「既にGitで追跡されているファイル(already listed in the index)」のみです。

追跡済みファイルとは

追跡済みファイルとは、過去に一度でも git add してコミットしたことがあるファイルです。Git がそのファイルの存在を認識している状態を指します。

git status コマンドで確認すると、以下のように表示されます。

# 追跡済みファイルの変更
modified:   src/index.js

# 新規ファイル(未追跡)
Untracked files:
  src/new-file.js

対象になるファイル

-a オプションで自動的にステージングされるのは、以下のファイルです。

  • 修正されたファイル(modified)
  • 削除されたファイル(deleted)

これらは git statusChanges not staged for commit: セクションに表示されます。

対象外のファイル

以下のファイルは -a オプションの対象外です。

  • 新規ファイル(untracked files)
  • .gitignore で除外されているファイル

Git公式ドキュメントでは、新規ファイルが対象外であることが明確に記載されています。

new files you have not told Git about are not affected.

出典: Git - git-commit Documentation

新規ファイルを含めたい場合の対処法

新規ファイルがある場合、-a オプションだけでは不十分です。新規ファイルを含めたい場合の方法を解説します。

新規ファイルがある場合の手順

新規ファイルを含めてコミットしたい場合は、先に git add で新規ファイルを追跡対象にする必要があります。

# 新規ファイルを追加
$ git add src/new-file.js

# その後 -am でコミット
$ git commit -am "Add new feature and update existing files"

この方法なら、新規ファイルと既存ファイルの変更を同時にコミットできます。

または通常の方法

新規ファイルも含めてすべての変更をコミットしたい場合は、通常の方法を使います。

$ git add .
$ git commit -m "commit message"

git add . はカレントディレクトリ以下のすべての変更(新規ファイルを含む)をステージングします。

使い分けの判断基準

どちらの方法を使うかは、状況によって判断します。

  • 新規ファイルがない場合 → git commit -am が便利
  • 新規ファイルがある場合 → git add .git commit -m を使用
  • 一部のファイルだけコミットしたい場合 → 個別に git add してから git commit -m

コミット前に git status で確認する習慣をつけておくと、適切な方法を選びやすくなります。

注意点とデメリット

-a オプションは便利ですが、使い方を誤ると意図しない変更をコミットしてしまうリスクがあります。

すべての変更が自動的に含まれる

-a オプションは、追跡済みファイルのすべての変更を自動的にステージングします。これは、意図していない修正もコミットに含まれる可能性があることを意味します。

たとえば、デバッグ用のコードを一時的に追加したまま -am でコミットすると、そのデバッグコードもコミットに含まれてしまいます。

コミット前に git status で変更内容を確認することが重要です。

# 変更を確認してからコミット
$ git status
$ git commit -am "commit message"

部分的なコミットができない

-a オプションは、追跡済みファイルの変更をすべて含めます。一部のファイルだけをコミットしたい場合には向いていません。

たとえば、複数のファイルを修正したが、そのうち1つだけをコミットしたい場合は、個別に git add を使う必要があります。

# 特定のファイルだけコミットする場合
$ git add src/index.js
$ git commit -m "Update index.js only"

安全な使い方

-a オプションを安全に使うための方法を紹介します。

  • コミット前に git status で変更ファイルを確認
  • git diff で具体的な変更内容を確認
  • 複数の変更がある場合は、論理的に分けてコミット

特に、以下のコマンドは習慣化しておくと安全です。

# 変更内容を確認
$ git diff

# ステータスを確認
$ git status

# 問題なければコミット
$ git commit -am "commit message"

まとめ

この記事では、git commit -am コマンドについて解説しました。

  • git commit -am は、追跡済みファイルの変更を自動的にステージングしてコミットする
  • -a オプションは git addgit rm を自動実行する
  • 新規ファイル(untracked files)は対象外なので注意
  • コミット前に git status で確認するのが安全
  • 新規ファイルがない場合は効率的に作業できる

よくある質問

git commit -amgit commit -m の違いは?

-a オプションの有無です。-am は追跡済みファイルの変更を自動的にステージングしてからコミットしますが、-m だけの場合は事前に git add が必要です。

-a オプションだけでも使える?

はい、git commit -a だけでも使えますが、この場合はコミットメッセージ入力用のエディタが開きます。コマンドラインでメッセージを指定したい場合は -m も合わせて使います。

毎回 -am を使っても大丈夫?

コミット前に git status で変更内容を確認する習慣があれば問題ありません。ただし、新規ファイルがある場合は対象外なので、状況に応じて使い分けましょう。