インデックスにステージされた変更を、レポジトリに保存します。
git commit の概要
現在のインデックスの状態を、ローカルレポジトリに記録します。この操作はよく「コミットする」と呼ばれます。
gitを使った作業では、変更内容を保存するときは、「git commit」の前に「git add」によって、作業ツリーで変更のあったファイルでインデックスを更新する必要があります。この操作は「ステージング」「ステージする」などと呼ばれますが、開発の現場では「(インデックスに)add する」とそのまま表現することも多いようです。
Gitでは一度コミットされた変更内容は、変更操作を明示的に行わない限り、破棄されたり変更されたりする事はありません。手元の変更を細かくコミットする事は、安全に開発を進めるための最も簡単な方法となります。一度コミットされたスナップショットは、いつでも閲覧したり、比較したり、また元に戻したりする事ができるのです。
「git commit」は Git において最も重要なコマンドだと言えます。
使用例
特定のファイルの変更内容をインデックスに追加し、コミットします。*はワイルドカードとして使えます。
git add index.php git add style/* // インデックスの変更内容をすべてコミット git commit
インデックスの中からコミットするファイルを限定する事もできますが、通常はインデックスを整えてから、すべてをコミットする事がほとんどだと思います。
// すべてのファイルをステージング git add . // ステージの中からstyle.cssだけをコミット git commit style.css
主要なオプション
-m
git commit の実行時に、コミットメッセージを入力できます。簡単なメッセージのみであれば、こちらを使って入力すると素早くコミットを作成できます。
// コメントのタイプミスの修正をコミットする git add . git commit -m 'Fix some typo in the comments.'
--a, --all
このオプションにより、作業ツリー上で「変更された」か「削除された」ファイルを、自動的にインデックスにステージしてコミットを作成します。これにより git add を実行することなく、素早くコミットを作成できます。
ただし、作業ツリー内に新しく追加されたばかりで、まだ Git の追跡対象となっていないファイルは、コミットに含まれる事はありません。そのようなファイルは明示的に「git add <ファイル名>」や、「git add .」によって、インデックスに追加する必要があります。(「.」は現在のディレクトリを表し、ディレクトリに含まれる全てのファイルをステージします。ただし、.gitignore で指定されたファイルはステージ対象に含みません)
--amend
現在のブランチの先頭のコミットを訂正する(amend)ようにコミットを作成します。コミットメッセージも元のコミットを訂正するように編集することになります。
ブランチの先頭のコミットはこのコミットにより完全に置き換えられ、新しくなります。
ここで、注意が必要なのは、もし訂正前の変更がすでに push されていれば、訂正されたコミットは、その過去のコミットと「コンフリクト(競合)」してしまう、ということです。
通常のチームでの開発フローでは、チーム内で共通された統合用のブランチでは、勝手に歴史を書き換えることは禁止されている事が多いはずです。かき消されたコミットを起点に、誰かが別のブランチを派生して開発を進めてしまうかもしれないからです。
統合用のブランチ上のコミットを修正する時は、代わりに、「git revert」によって打ち消しのコミットを新しく作ることが推奨されます。ただし、開発チームによって方針は様々ですので、どうすればいいかわからない時は、開発のマネージャーやチームメンバーに相談しましょう。
関連の深いgitコマンド
git add
作業ツリーの変更内容をインデックスに追加します。git commit を実行する前に必ず行うコマンドです。コミットに含めるべき変更を取捨選択するコマンドでもあります。
git reset
変更してしまった作業ツリーやインデックスの状態を元に戻したり、またブランチの状態を強制的に書き換えたりするなど、様々な用途に使います。また、「git reset --soft」は、「git --amend」とよく似た目的、すなわち、直前のコミットを訂正する時に使います。
git status
作業ツリーと、インデックスの状態を確認します。現在どのファイルを変更し、またどのファイルがインデックスに含まれるかを明示的に確認します。git commit の実行前に頻繁に利用するコマンドです。
その他のオプション
git commitで利用可能な主なオプション
オプション | 詳細 |
-a --all |
作業ツリー上で「変更された」か、「削除された」ファイルを、自動的にインデックスにステージします。「追加された」ファイルは無視されるので注意が必要です。追加したファイルは明示的に「git add <ファイル名>」で明示的に追加したり、「git add .」によって一括追加する必要があります。 |
--amend | 現在のブランチの先頭のコミットを訂正する(amend)ようにコミットを作成します。コミットメッセージも元のコミットを訂正するように編集することになります。ブランチの先頭のコミットはこのコミットにより完全に置き換えられ、新しくなります。 |
Git公式ドキュメント
Git公式ドキュメント「git commit」へのリンクです。