第5章 ステージングとコミット¶
この章で学ぶこと¶
Git の三段階モデル (working tree / index / HEAD)
git addでステージングするgit commitでコミットするコミットメッセージの書き方
動機・背景¶
Git は他のバージョン管理ツールと違って、「いきなりコミット」する設計にはなっていません。変更したファイルを一度 index (ステージング) と呼ばれる準備エリアに乗せ、そこから改めてコミットするという 2 段階方式を採用しています。
この一手間が入ることで、「作業ツリーには複数の変更があるが、そのうち一部だけを切り出してコミットしたい」「コミットを確定する前に、何が含まれるかをもう一度確認したい」といった操作が自然にできるようになります。最初は冗長に感じるかもしれませんが、慣れるとこのワンクッションが品質の高いコミット履歴を作るうえでとても有用であることが分かってきます。
本章では、第 4 章で作成した ~/my-scripts/README.md を題材にして、ステージングからコミットまでの一連の流れを体験していきます。
三段階モデル¶
段階 |
名前 |
役割 |
|---|---|---|
1 |
working tree (作業ツリー) |
あなたが今編集している実ファイル |
2 |
index (ステージング) |
コミット予定の変更が積まれる準備エリア |
3 |
HEAD (最新コミット) |
直近のコミット時点のスナップショット |
注釈
git add は 作業ツリー → index の移動。git commit は index → HEAD の確定操作です。
README.md をステージする¶
注釈
第 4 章で作成した ~/my-scripts/README.md がある状態を前提にしています。まだ無い場合は第 4 章の手順を完了してから戻ってきてください。
git add README.md
git status
期待出力:
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Changes to be committed の下に new file: README.md が表示されていれば、ステージング成功です。これは index に「README.md を新規追加する」という変更が積まれた状態を意味します。
最初のコミット¶
index に積まれた変更を確定させるには git commit を使います。-m オプションでコミットメッセージを直接指定できます。
git commit -m "initial commit: add README"
期待出力:
[main (root-commit) abc1234] initial commit: add README
1 file changed, 1 insertion(+)
create mode 100644 README.md
(root-commit) は「このリポジトリで最初のコミット」であることを示します。コミットが作られたかは git log --oneline で確認します。
git log --oneline
abc1234 (HEAD -> main) initial commit: add README
HEAD -> main の表示は、現在 main ブランチの先頭 (= このコミット) にいることを示しています。
コミットメッセージの書き方¶
コミットメッセージは未来の自分や同僚への手紙です。次のパターンを意識すると読みやすい履歴になります。
動詞で始まる短い1行 (50字以内)
(空行)
詳しい説明 (必要なら、何をなぜ変えたか)
例:
fix backup script to handle empty source directory
When the source directory is empty, the script previously failed with
"path not found". Now it logs a warning and exits cleanly.
Tip
1 行目は 動詞で始める:
add,fix,update,remove,refactor何をではなく なぜ を書く (差分を見れば「何を」は分かるため)
複数の関心事を 1 コミットに混ぜない
エディタを使ったコミット¶
-m を省略すると設定済みエディタが起動し、複数行のコミットメッセージを編集できます。
git commit
第 3 章で core.editor を VS Code 等に設定している場合、ここでエディタが開いてコミットメッセージを入力する画面になります。
README.md を編集してもう一度コミット¶
次は既存ファイルへの変更をコミットしてみます。README.md に説明を 1 行追記しましょう。
Add-Content -Encoding utf8 -Path README.md -Value ""
Add-Content -Encoding utf8 -Path README.md -Value "自動化スクリプトを管理するリポジトリです。"
git status
期待出力に modified: README.md が含まれていることを確認します。確認できたらステージしてコミットします。
git add README.md
git commit -m "describe purpose in README"
注釈
ここで Out-File -Append -Encoding utf8 を使わないのは、PowerShell 5.1 では UTF-8 BOM 付きで書き込まれてしまい、Git の差分表示で余計なバイトが現れることがあるためです。本書では BOM なしで安全に追記できる Add-Content -Encoding utf8 を使用します。
ハンズオン課題¶
README.mdに「使い方」の節を追加して 1 コミット作るREADME.mdにミスタイプを 1 つ入れた状態でコミットし、その後修正コミットを追加するgit log --onelineで 3 つのコミットが並ぶことを確認
まとめ¶
三段階モデル: working tree → index → HEAD
git addでステージ、git commitで確定コミットメッセージは「動詞 + 簡潔な要約」で「なぜ」を書く