本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第7回 | git diff で確認して変更を記録する | 動作確認からコミットまでをつなぐ|UNIX Cafe

CLIで開発する | 第7回
前回は、テストで見つけた計算ミスを修正しました。アプリを実行し、テストも通るようになったので、処理としては修正された状態です。
ただし、開発では「直したら終わり」ではありません。何を変更したのかを読み返し、自分で説明できる状態にしてからGitに記録します。
今回は、前回直した src/calculator.py を題材に、git status、git diff、git add、git commit、git log --oneline までを順番に使います。
Gitのコミットは、ただ保存する操作ではありません。「この変更は何を直したものか」を、あとから見返せる形で記録する操作です。
この記事で学べること
git statusで変更済みファイルを確認する方法git diffで変更内容を読む方法git diff --stagedで記録予定の差分を見る方法- テスト済みの変更を
commitして履歴に残す流れ
練習を始める前の準備
第6回で使った unix_cafe_order ディレクトリで作業を続けます。別の場所にいる場合は、作業用ディレクトリへ移動してください。
pwdpwdは、現在いる場所を表示するコマンドです。unix_cafe_orderの中にいることを確認してから進めます。
次に、短い表示でGitの状態を確認します。
git status --short第6回の修正がまだ記録されていない場合は、次のように表示されます。
M src/calculator.py先頭の M は、ファイルが変更されていることを表します。ここでは、src/calculator.py が変更済みです。
なお、M の前に空白があるのは、まだ git add されていない変更だからです。今は「変更はあるが、まだ記録対象には入っていない」状態です。
git status で全体を見る
まずは、通常の git status で作業ツリー全体の状態を見ます。
git status実行すると、次のような内容が表示されます。
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: src/calculator.py
no changes added to commit- ここで見るポイントは、
modified: src/calculator.pyです。 - これは、
src/calculator.pyが変更されているが、まだ記録対象には選ばれていないという意味です。
git diff で変更内容を読む
変更されたファイルが分かったら、次は中身を確認します。ここで使うのが git diff です。
git diffgit diff は、まだ git add していない変更内容を表示します。今回の例では、次のような差分が表示されます。
diff --git a/src/calculator.py b/src/calculator.py
index 8b0c0a1..2b4f4a2 100644
--- a/src/calculator.py
+++ b/src/calculator.py
@@ -1,5 +1,5 @@
def calculate_total(orders):
total = 0
for order in orders:
- total += int(order["price"])
+ total += int(order["price"]) * int(order["quantity"])
return total- 差分のすべてを読む必要はありません。まずは、行の先頭にある
-と+に注目します。 - 先頭に
-が付いた行が削除された内容、+が付いた行が追加された内容です。
a/は変更前、b/は変更後を表すGitの表示上の名前です。実際にaやbというフォルダが作られているわけではありません。
今回の変更では、価格だけを足していた行が、価格と数量を掛ける形に変わっています。
- total += int(order["price"])
+ total += int(order["price"]) * int(order["quantity"])この差分を見て、「数量を合計金額に反映するために、計算式へ quantity を追加した」と説明できます。
Gitに記録する前に、このように変更内容を一度読み返しておくと、後から履歴を見たときにも意味が分かりやすくなります。
記録前にテストをもう一度実行する
- 差分を確認したら、テストももう一度実行します。
- 前回すでに通していても、記録する直前に確認しておくと安心です。
python3 -m unittest discover -s tests -v実行結果の最後に OK と表示されれば、テストは成功しています。
test_calculate_total (test_calculator.TestCalculator.test_calculate_total) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OKここまでで、「差分を読んだ」「テストも通った」という2つの確認ができました。次は、この変更をGitの記録対象に入れます。
git add で記録対象を選ぶ
git addは、今回のコミットに含める変更を選ぶ操作です。- 今回は
src/calculator.pyだけを記録します。
git add src/calculator.pygit add を実行しても、成功した場合は何も表示されません。
そこで、記録対象に入ったかどうかを確認するため、もう一度 git status を実行します。
git status今度は、次のように Changes to be committed の下に表示されます。
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/calculator.pyChanges to be committedは、次のコミットに含まれる予定の変更です。- つまり、
src/calculator.pyは記録対象に入っています。
git diff --staged で記録予定を見る
git addした後は、普通のgit diffでは差分が表示されなくなることがあります。- これは、変更が記録対象に移動したためです。
記録対象に入っている差分を見るには、git diff --staged を使います。
git diff --staged表示される差分は、先ほど確認した内容と同じです。
- total += int(order["price"])
+ total += int(order["price"]) * int(order["quantity"])git diffは、まだgit addしていない変更を見ます。git diff --stagedは、すでにgit addして、次のコミットに入る予定の変更を見ます。
コミット前に
git diff --stagedを読む習慣をつけると、余計な変更を混ぜたまま記録してしまう失敗を減らせます。
git commit で変更を記録する
- 差分とテスト結果を確認できたので、変更をコミットします。
- コミットメッセージは、何を直したのかが分かる短い文にします。
git commit -m "Fix order total calculation"Fix order total calculationは、「注文合計の計算を修正した」という意味です。
実行すると、次のような結果が表示されます。
[main 4f2a1c8] Fix order total calculation
1 file changed, 1 insertion(+), 1 deletion(-)1 file changedは、1つのファイルに変更があったことを表します。1 insertion(+)と1 deletion(-)は、1行追加され、1行削除されたという意味です。
今回の修正は、計算式を1行置き換えた変更でした。そのため、追加1行、削除1行として記録されています。
git log --oneline で履歴を見る
コミットできたら、履歴を確認します。短く見るには git log --oneline を使います。
git log --oneline履歴の先頭に、今作ったコミットが表示されます。
4f2a1c8 Fix order total calculation
9d1b7a3 Add calculator test
7c8e2d0 Add order total calculator左側の短い英数字はコミットIDです。右側がコミットメッセージです。
- ここまでで、計算ミスの修正がGitの履歴に残りました。
あとから見返したときも、
Fix order total calculationというメッセージから、注文合計の計算を直した変更だと分かります。
最後に状態を確認する
コミット後は、作業中の変更が残っていないか確認します。
git status次のように表示されれば、作業ディレクトリはきれいな状態です。
On branch main
nothing to commit, working tree clean
working tree cleanは、未記録の変更が残っていないことを表します。今回の作業はここで完了です。
開発の流れとして整理する
今回の操作を、開発の流れとして整理すると次の順番になります。
git statusで変更済みファイルを見るgit diffで変更内容を読む- テストを再実行する
git addで記録対象を選ぶgit diff --stagedで記録予定の差分を見るgit commitで履歴に残すgit log --onelineで履歴を確認する
ポイントは、コミットの前に差分を読むことです。変更内容を自分の言葉で説明できる状態にしてから記録すると、Gitの履歴がただの保存場所ではなく、開発の記録として使いやすくなります。
手を動かすミニ練習
最後に、今回の内容を自分の環境でも確認してみてください。
git statusとgit diffの役割の違いを自分の言葉で説明してみるgit add後にgit diff --stagedを実行する- コミット前に、変更内容を1文で説明する
git log --onelineで作成したコミットを確認する
次回予告
次回は最終回です。小さな不具合を題材に、確認、探索、修正、テスト、差分確認、Git記録までを最初から最後まで通します。






