Git の利用において、最も重要なコマンド「git commit」。その動作仕様とオプションをおさらいしつつ、使用事例をまとめました。
目次
git commit コマンドの概要
git commit は、変更内容をレポジトリに記録するコマンドです。バージョン管理において、もっとも基本的な動作を持つコマンドの使い方を詳しく見ていきます。
git commit コマンドの使い方
インデックスにステージされた変更をコミットする
git commit の最もシンプルな実行形式です。git add <file> により、インデックス領域にステージされた変更内容をすべてまとめたコミットを作成します。
// インデックス領域にステージされた変更からコミットを作成
git commit
指定したファイルの変更をコミット
git add を実行することなく、指定した作業ツリー上のファイルをそのままコミットします。現在のディレクトリ配下のファイルを対象にし、インデックスへのステージとコミットの作成を Git が同時に行ってくれます。指定ファイルの新規作成、変更、削除にかかわらずステージされ、コミットされます。
// 指定したファイルをコミット
git commit some-file.php
また、ファイル指定により、.gitignore に記載されたファイルは、当然ながら無視されます。
// 実行
$ git commit some-file-to-ignore.txt
// 結果。ファイルがステージされないため、コミットに含められまい。
error: pathspec 'some-file-to-ignore.txt' did not match any file(s) known to git.
このようなファイルをあえてコミットに含めたいのであれば、git add の強制オプションを用いて「git add -f <ファイル>」とし、その後git commit を実行する他ありません。(そのようなケースはあまり発生しないと思いますが・・・)
現在のディレクトリ配下のファイルに含まれる変更をコミット
上記のファイル指定を方法を拡大したものですが、「.(ドット)」で現在のディレクトリのファイルの全てを指定することができます。入力の簡単さから、筆者は最もよく使うコミット方法です。
// 現在のディレクトリ配下のすべてファイルの変更をコミット
git commit .
また、当然ながら、.gitignore に記載されたファイルは無視されます。
既知のファイルの変更を全てコミット「-a, --all」
現在 Git の管理対象にあるファイルか、インデックスに含まれるファイルに含まれる変更を全てを自動でコミットに含めます。注意が必要なのは、このコマンドは、新規作成されたファイルがステージされることはありません。そのような新しいファイルは、明示的にgit add する必要があります。また、当然のことながら、.gitignore に記載されたファイルは無視されます。
// Git 管理下のファイルをすべてをコミットする git commit -a
また、git add のオプション仕様はやや複雑で、しばしばgit commit のオプションと似ていて混乱します。こちらもぜひご一読下さい。
git commit の取り消し?
git commit は取り消すことが可能です。
git commit の主要なオプション
上記で紹介していない、その他の有用なオプションです。
直前のコミットを訂正する「-a, --amend 」
非常によく使うオプションです。直前のコミットを修正し、そのコミットと置き換えるように新しいコミットを修正します。コミット著者や、日付は維持されます。
// 直前のコミットを置き換える git commit --amend
これにより作られるコミットの識別子(Sha-1)は以前のものとは異なる新しいものとなります。ですので、もし修正前のコミットをpushしてしまっていれば、訂正したコミットを改めてpushしたとき、異なる履歴として、コンフリクトが生じます。
コンフリクトに関してはこちらを御覧ください。
コミットコメントを入力する「-m <msg>, --message=<msg>」
コミッ コメントを git commit 実行と同時に入力し、エディタを開くことなく、素早くコミットを作成します。手早くコミットしたい時に利用するオプションです。
// コミットメッセージを入力 git commit . -m 'Fix the form bug.'
空白行や、行末の空白を自動的に削除する
ファイルの開始直後、終了直前の空白行を削除したり、行末の空白行があれば、自動的に削除してくれます。ただし、コメントや意図的な複数行の空行も削除してしまうので、使い所はすこし限定的となりそうです。
// 空白を削除 git commit strip
参考情報
手前味噌ながら、当サイトの git commit コマンド関連の記事です。
Git の公式Documentサイトです。