第4章. Commit、Push、Fetch の定義
Commit は「作業のまとまり 1 つ」を保存する動きです。 大きくまとめすぎず、意味のある単位で区切って保存するほうが扱いやすくなります。
- 良い Commit の単位: 「ボタン位置の整列」「背景画像の差し替え」のように目的がはっきりしている
- 悪い Commit の単位: 関係のない作業を一度に全部混ぜてしまう
ここで大事なのは、各 Commit が必ずしも完全動作している必要はないという点です。 作業を細かく分けていく途中では、中間状態の Commit があってもかまいません。 ただし ブランチを Merge するときには機能が完成している状態であるほうがチーム作業は安全です。
Push は、ローカルリポジトリの Commit をリモートリポジトリへ送る動きです。
Fetch は、リモートの最新記録をローカル側の origin/main のような追跡ブランチへ取り込む動きです。 このとき現在の作業位置(HEAD)はすぐには変わりません。
図 4-1. Commit は小さな作業単位で積み上げる
1 つの Commit に 1 つの目的だけを入れると、あとで確認や巻き戻しがしやすくなります。
Commit をクリックして Diff を見ると、「1 まとまりの範囲」がはっきり見えてきます。
図 4-2. 同僚にコミットを共有する流れ (2)
1〜2段階(まだ Fetch 前)では、担当者B の main と origin/main は同じ Commit を指しています。
担当者A local は Push の段階で origin/main も最新化される様子を一緒に見せます。
3段階目の Fetch はリモート HEAD の Commit から始まります。
担当者B は main(現在の作業位置)と origin/main(リモート追跡位置)だけで説明し、Fetch のあとも HEAD は main にそのまま残ります。