git commit

コマンドの概要

インデックスの変更内容をローカルリポジトリに登録する。
git commitによりリポジトリに登録された状態がコミットとして管理される。コミットとコミットの差分を確認したり、いつでも任意のコミットの状態を復元できるようになる。

コミットの方法

インデックスにステージングされた変更をコミットするには

1$ git commit

git commitを実行するとコミットメッセージ入力のためにエディタが起動する。何かコミットを選んで作業するときはコミットメッセージでコミットを特定することになるので、コミットメッセージは大事。

git commit -m"message"でコミットと同時にメッセージを入力することもできる。

1$ git commit -m"first commit"

git log -onelineでログを参照するときなどにはメッセージの 1 行目のみが表示されるので、1 行目にはそのコミットの概要が端的にわかる内容を記載し、次行以降でその詳細を記載したほうがよい。

インデックスにステージングされていない変更も含め、ワーキングツリー全体をコミットするときは、

1$ git commit -a

ただし、一度もgit addされていないファイルはまだ Git の管理対象外のためコミットされない。過去のコミットに含まれるファイルの変更、削除については、git addせずともgit commitにより"インデックス"にステージングされつつコミットされるが、前回コミット後に新規に追加されたファイルはgit addにより Git の管理対象する必要がある。

ファイルやディレクトリ、 . を指定してのgit commitも可能だが、コミット予定としてインデックスへのステージングできちんと整理し、インデックスをコミットするべき。

コミットの上書修正

コミットを修正したいときに、現在のインデックスの内容でコミットを上書修正するのが

1$ git commit --amend

--amendオプションをつけると、新しいコミットを作成するのではなく、前回コミットをインデックスの内容で修正する。

インデックスに修正を加えずにgit commit --amendするとコミットメッセージの再入力が可能となるため、コミットメッセージの修正によく使われる。
古いコミットを破棄し現在の内容で新しくコミットするという動作をするため、前回コミット後にgit pushしていた場合、git commit --amendによりリモートリポジトリとの間で齟齬を生ずる点は注意。

関連するコマンド

git diff : ワーキングツリー、インデックスと指定したコミットの差分を確認する
git log : コミットのログを確認する
git reset : 指定したコミットに HEAD を移動させる / ワーキングツリー、インデックスに展開する。