Git
This command saves your changes as a small checkpoint with a message, so you can track and review your work later in Git.
git commit
Gitの git commitコマンドは、リポジトリに対して変更を記録するための非常に重要なコマンドです。このコマンドを使うことで、プロジェクトの進行状況や変更履歴を詳細に管理することができます。
基本的な使い方
まずは「どこからどこへ保存されるのか」のイメージを持っておくと分かりやすくなります。
作業ツリー(今編集中のファイル)
↓ git add
ステージングエリア(次のコミット候補の置き場)
↓ git commit
リポジトリ(コミット履歴として保存される場所)
git commit は「ステージングエリアにある内容を、リポジトリの履歴として一つの区切り(コミット)にまとめて保存するコマンド」です。まだステージしていない変更は、そのコミットには含まれません。
git commit -m "コミットメッセージ"
-mオプションを使ってコミットメッセージを指定します。このメッセージは、どのような変更が行われたのかを説明するために非常に重要です。
よく使われるオプション
- -a
- 全ての変更を自動的にインデックス(ステージ)に追加してコミットします。新しく追加されたファイルは含まれません。
-
git commit -a -m "コミットメッセージ"
- --amend
- 最後のコミットを修正します。コミットメッセージやステージングエリアの変更を修正したい場合に使用します。
-
git commit --amend -m "修正されたコミットメッセージ"
- -v
- コミットメッセージの編集画面に、変更内容の差分を表示します。
-
- --no-edit
- コミットメッセージを編集せずにコミットします(--amendと一緒に使われることが多い)。
-
git commit --amend --no-edit
インタラクティブなコミット
時には、コミットに含める変更をもっと細かく選びたい場合があります。このようなときは、変更を対話的に選んでステージングする「インタラクティブなコミット(実際にはインタラクティブなステージング)」が便利です。
git add -pコマンドを使用すると、変更をパッチごとに確認してステージングすることができます。これにより、特定の変更だけを選んでコミットすることが可能です。
コミットメッセージのプラクティス(習わし)
プロジェクトごとに詳細な書き方は変わりますが、おおよそ次のように記述します。
1行目:要約(タイトルや概要)
2行目:空白にする
3行目以降:詳細(変更内容)
1行目には prefix(プレフィックス)を利用した記述を行います。prefixは次のようなものがありますが、すべてを利用することはほとんどないと思います。利用する prefixの種類と用途については開発チームで、何を、どのように使うかをしっかりと決めて利用します。
- prefix(日本語)
- 意味
- Add:(新規追加:)
- 新規ファイル、ファイル内記述の新規追加
- Feat:(新規追加:)
- 機能に関する新規追加
- Fix:(バグ修正:)
- バグの修正
- Improve:(改良改善:)
- ソースコードの改善
- Refactor:(構造整理:)
- ソースコードや変数名などの整理
- Update:(機能更新:)
- 機能の改善に伴う変更(バグではない)
- Change:(仕様変更:)
- 依頼内容変更など仕様に伴う変更
- Rename:(名前変更:)
- ファイル名など名前にかかわる変更
- Docs:(文書修正:)
- テキストの変更
- Test:(テスト関連:)
- テストコードやテスト項目の追加など
- Hotfix:(重大なバグ修正:)
- 重大なバグに対しての修正
- Remove:/Delete:(削除:)
- ファイルの削除、機能の削除など
- Move:(ファイル移動:)
- ファイルの移動
- Style:(スタイル関連:)
- コーディング、スタイルシートの修正
- Disable:(取り消し:)
- コードのコメントアウト化
- Revert:(取り消し:)
- 変更内容の取り消し
複数行のコミットメッセージを書く方法
インタラクティブエディタを使用
git commitコマンドをオプションなしで実行すると、デフォルトのテキストエディタ(通常は Vimや Nano)が開きます。ここで、複数行のコミットメッセージを入力できます。
- コマンドを実行します。
- デフォルトエディタが開くので、1行目に簡単なタイトルを入力し、2行目を空けます(この行は空けるのが一般的な慣習です)。
- 3行目以降に詳細な説明や変更の理由を記述します。
- エディタを保存して終了すると、複数行のコミットメッセージが付いたコミットが作成されます。
-m オプションを使って複数行のコミットメッセージ
git commit -m オプションで複数行のコミットメッセージを一度に指定することも可能です。この場合、各行をシェル内でクオートし、改行文字で分割します。
git commit -m "タイトル" -m "詳細な説明や変更理由をここに書くことができます"
-m オプションを複数回使用することで、複数行のコミットメッセージを作成することができます。
よくある質問(FAQ)
- コミットの前に毎回やっておくと良い確認はありますか?
git status や git diff --staged を実行して、どの変更がコミットされるかを目で確認してから git commit を実行すると安心です。
- コミットメッセージは日本語でも大丈夫ですか?
- チームでルールを決めていれば、日本語でも英語でも問題ありません。まずは「自分とチームメンバーが読み返して意味が分かるか」を基準にすると良いです。
- 1 回のコミットにどれくらいの量の変更を入れるべきですか?
- 「1 つの理由でまとめて説明できる変更」を 1 コミットにするのが基本です。バグ修正とリファクタリングなど、理由が違う変更はコミットを分けると後から追いかけやすくなります。
- 間違ってコミットしてしまった場合はどうすればいいですか?
- まだリモートに push していない場合は
git commit --amend や git reset でやり直せます。すでに共有済みのコミットを変更する場合は、チームメンバーと相談してから git revert などを使うと安全です。
よくあるエラー早見表
- nothing to commit, working tree clean
- コミットする変更がありません。ファイルを編集して保存するか、すでにステージ・コミット済みでないかを確認します。
- fatal: pathspec '...' did not match any files
- 指定したファイル名やパスが存在しません。スペルミスやパスの階層を確認してください。
- Please tell me who you are. / unable to auto-detect email address
- Git のユーザー名やメールアドレスが設定されていません。
git config user.name と git config user.email で設定してから再度コミットします。
- fatal: cannot do a partial commit during a merge
- マージ中に一部だけコミットしようとしたときに出るエラーです。まずマージ結果全体を確認し、必要であればマージを完了させてからコミットします。