Git入門:バージョン管理のきほん
いまの状態を確かめる(status と diff)
この回でやること
git status の見出しの意味と git diff の記号の読み方を覚えて、コミットする前に何が変わったのかを自分の目で確認できるようになりましょう。
- 読む 約 6 分
何が入るのかは、ファイル名だけでは決められない
git add の前に見るべきものが 2 つあります。どのファイルが変わったのかと、その中身がどう変わったのかです。前者が git status、後者が git diff です。
git status は状態を報告するだけで、何も書き換えません。何度打っても害はありません。迷ったらまず打つ、という癖がつけば混乱の大半は避けられます。
3 種類の変更を作って、表示を読んでみます。
ターミナル
$ echo "## 使い方" >> README.md # 追跡済みを編集
$ echo "console.log('bye');" > bye.js # 新しく作る
$ echo "// 実験用" >> app.js
$ git add app.js # これだけステージへ
$ git status
On branch main
Changes to be committed:
modified: app.js
Changes not staged for commit:
modified: README.md
Untracked files:
bye.js見出しが 3 つ出ました。それぞれが場所を表しています。
| 見出し | 意味 |
|---|---|
Changes to be committed | ステージにある。次の git commit に入る |
Changes not staged for commit | 追跡済みだが、まだ git add していない |
Untracked files | 一度も記録したことがない |
読むのはこの 1 点だけで足ります。Changes to be committed に載っているものだけがコミットされます。
記号の意味は 3 つだけ
中身の差は git diff で見ます。
ターミナル
$ git diff
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
# Git practice
Git の練習用リポジトリです。
+## 使い方上の 4 行は前置きです。a/ が変更前、b/ が変更後で、@@ の行は表示している範囲を示します。読むべきは行頭の記号です。行頭が半角スペースなら変わっていない行、- なら消えた行、+ なら足された行です。
Git は行の単位で見ます。1 文字だけ直した場合も、1 行消えて 1 行足された形で出ます。多くの環境では削除が赤、追加が緑で色分けされます。
diff が空なのは、もう add したから
ここが最初のつまずきどころです。git diff が見せているのは、ワークツリーとステージの差だけです。さきほど app.js は git add してしまったので、git diff には出てきません。
ステージに乗ったほうを見るには --staged を付けます。
ターミナル
$ git diff --staged
diff --git a/app.js b/app.js
--- a/app.js
+++ b/app.js
@@ -1 +1,2 @@
console.log('hello');
+// 実験用「変更したはずなのに diff が空」と感じたら、まずこちらを試してください。git diff は add する前の確認、git diff --staged はコミットする前の最終確認、と役割が分かれています。
出力が画面に収まらないと、Git は表示用のプログラムを立ち上げます。矢印キーで動くのに終われない、という状態になったら
qを押してください。git logでも同じです。
コミットの前にこの 2 つを挟むだけで、デバッグ用の出力の消し忘れや、設定ファイルに書いた鍵の混入に気づけます。確認の 10 秒と、公開した鍵を回収する数時間は釣り合いません。
git statusは何も壊さない。3 つの見出しはワークツリー・ステージ・リポジトリに対応するgit diffの行頭は、スペースが据え置き、-が削除、+が追加- add したものは
git diffに出ない。コミット前の確認はgit diff --staged