Git はファイルをどこに置いているのか
AI に Git を任せても、いまの変更がどこまで届いたかは自分で確かめられます。読み終えると、add・commit・push・pull で何がどこへ動くのかが分かって、手元で止まっているのか GitHub に載っているのかを自分で見分けられます。
確かめられるのは、場所が 4 つしかなく、外にあるのはそのうち 1 つだけだからです。
私の場合は、外出先ではスマホから頼んで作業して、その結果を GitHub に上げておきます。帰宅後は PC で受け取るだけで、続きから始められる。GitHub そのものが何をしてくれるかはGitHub とは何かに書きました。
Git がファイルを置く 4 つの場所
Git は、ファイルを 4 つの場所に分けて持っています。そのうち 3 つは、作業しているフォルダの中にあります。 外にあるのは残りの 1 つ、GitHub だけです。
Git は GitHub 側を「リモート」、記録が積まれる場所を「ローカル」と呼びます。3 つとも手元にありますが、この名前が付くのは記録が積まれる場所だけです。積み重なった記録のことは、まとめて「履歴」と呼びます。
下に出てくる git add のような言葉は、AI が実行して、会話の中にも出てきます。自分で打たなくても、目にはします。押すと、その操作で動く矢印だけが伸びます。見てほしいのは、どこで止まってどこから先へ行くのかです。
作業ツリーで保存は上書きなので、前の状態は残りません。 Git が別に取っておくのは、「ここまで」と区切った時点だけです。
ステージがあるのは、何を記録するかを人が決めるためです。 たとえば AI に 5 ファイル直してもらって、3 つは採用、2 つはもう少し見たい——そのとき、採る分だけを乗せて記録できます。全部まとめて記録するしかないなら、この段は要りません。
記録するのと、外に出すのは別の操作
git commit で記録した先が、いったん手元なのには理由があります。 記録することと外に出すことを別の操作にしておくと、タイミングを別々に決められるからです。手元では何度でも区切っておいて、まとまったところでまとめて送る。だから commit と push が分かれています。
送っていないあいだ、その履歴は PC の中だけにあります。ほかの場所から見えるようになるのは、git push のあとです。
fetch は受け取るだけ、pull は編集中のファイルまで反映する
fetch で止められるのは、届いたものを見てから、手元に反映するか決めたいときです。受け取った履歴はローカルに積まれますが、自分のコミットもそこに残ったままなので、この時点では両方が並んでいます。
git pull は、そこで止まりません。この後半が merge です(受け取った履歴を、いま編集しているファイルに重ねる操作)。図で矢印が 2 本続くのはそのためです。
すんなり通るのは、手元に自分だけの変更が無いときです。GitHub 側だけが進んでいるなら、手元がそこへ追いつくだけで済みます(Git はこれを Fast-forward と表示します)。
手元でも別にコミットしていると、両方を合わせる記録が 1 つ増えます。 下は、手元で todo.md を足しているあいだに、AI が memo.md に説明を足してリモート側へ送っていた状態で git pull を打ったときの出力です(練習用に手元に作ったリモートなので、場所は伏せました)。
$ git pull
From <練習用のリモート>
0f39f48..d802ba6 main -> origin/main
Merge made by the 'ort' strategy.
memo.md | 2 ++
1 file changed, 2 insertions(+)
2 行目が受け取ったところ(fetch)、Merge made by からが編集中のファイルに重ねたところ(merge)です。図の 2 本の矢印が、そのまま 2 段に出ています。 触ったファイルが別々だったので、Git が自分で合わせて終わりました。
同じところを両方で書き換えていれば、ここで止まって人に聞きます。 どちらを残すかは、機械が決められないからです。
届いたかどうかは、自分で確かめられる
持ち帰りは 1 つです。どこまで届いたかは、2 つの見方で分かります。
送った側は、GitHub のページを開いて、そこに自分の変更が載っていれば push まで届いています。 載っていなければ、まだ PC の中です。
受け取った側は、pull が「追いつくだけ」で終わったかどうかです。止まったなら、手元にも別の記録があるということ。冒頭の「帰宅後は受け取るだけで続きから始められる」が成り立つのは、外出先で push しておいて、片方だけが進んでいる形にしてあるからです(Claude Code と GitHub をスマホで使った記録)。
毎回 GitHub を開いて確かめるより前に、そもそも何を黙って実行させるかを決めておけます。毎回同じ説明をしないための 2 つのファイルに、取り消せない操作にだけ確認を出す設定を書きました。