今日あなたが実際にやったこと: ブランチ作成 → コミット → プッシュ → PR作成。
最後の マージ は「main保護ルール(承認が必要)」で止まりました。この紙は、その全体像の地図です。
① まず大前提:コードは「2つの場所」にある
Gitのチーム開発でいちばん大事なのは、コードが 手元(ローカル) と GitHub(リモート) の2か所にあること。言葉のほとんどは「この2か所の間で、何を・どっち向きに動かすか」を指しています。
🖥 ローカル(あなたのPC)
手元のコピー。ここで自由に編集し、コミット(履歴に保存)する。まだ誰にも見えない自分だけの空間。
- 作業ツリー(編集中のファイル)
- コミット履歴(手元の保存記録)
→push(上げる)
←pull(取り込む)
最初は clone
☁️ リモート(GitHub)
チーム共有の正本置き場。この場所のことを origin と呼ぶ。みんなはここを見て同期する。
- 共有ブランチ(main など)
- PR・レビュー・履歴
② 変更の一生(クリックで詳細)
1つの修正が「編集」から「みんなに届く」までの流れ。青=手元の作業/緑=GitHub上の作業。プッシュがその境目です。各ステップを押すと下に説明が出ます。
↑ ステップを押すと、ここに「何をする操作か・今日の例」が出ます。
③ 本流(main)と枝・合流の流れ
main=みんなの幹(本流)。各自そこから枝(ブランチ)を分け、自分の作業を進め、終わったら合流(マージ)で幹に戻します。下の図は あなた と Aさん が同時に別の枝で作業して、それぞれのタイミングで合流する様子です。
● main(幹)
● あなたの枝
● Aさんの枝
大きい○=合流点(マージ)
あなたがマージしたとき、Aさん・Bさんの「環境」はどうなる?(押して試す)
結論:あなたがマージしても、他メンバーの手元(環境)は勝手に変わりません=影響なし。各自が自分のタイミングで git pull したときだけ受け取ります。ボタンを順に押してみてください。
まとめ:マージは「GitHubのmainを更新する」だけ。A・Bの手元は触られない(影響なし)。
それぞれが git pull した瞬間に、自分のタイミングで最新を受け取る。作業中でも壊れず、違うファイルならコンフリクトも起きない。
④ 相手のコミットに、自分はどう気づく?
結論:Gitは「相手がコミットしたよ」と通知してくれません。 相手が push して、かつ自分が fetch(GitHubを見に行く)して、その2つがそろって初めて気づけます。この節は、そのサインの読み方と、自動で気づくための設定です。
「相手のコミットが見えない」の原因はほぼ2つ: ① 相手がコミットしただけで push してない(=まだGitHubに無い)/② 自分が fetch/pull していない(=取りに行っていない)。どちらか欠けると、相手の変更はあなたの画面に出てきません。
VSCode左下・ステータスバーの読み方
気づきの主役はここ。記号ごとに意味がまったく違います。下は「未コミットあり+相手のpush2件待ち+自分の未push1件」を全部盛りした例。
⑂ main*
↓2
↑1
↻
* アスタリスク
手元に未コミットの変更がある印。コミットすれば消える。fetchとは無関係(ここが混同しやすい)。
↓N ダウン
相手がpush済みで、あなたがまだ持っていないコミットがN個。=これが実質「相手のコミット通知」。pullで取り込む。
↑N アップ
あなたがコミットしたがまだpushしていないのがN個。pushで解消。
↻ 同期ボタン
押すと fetch+pull/push をまとめて実行。
自動で気づけるようにする:autofetch
大事な落とし穴:この ↓N は 自分でfetchしないと出ません。VSCodeには裏で定期的にfetchする git.autofetch があり、初期状態はオフ。オンにすると数分おきに自動で覗いて、相手がpushしたら ↓N が勝手に出ます。2人以上で作業するなら、オンを推奨。
オンにする(GUI・かんたん)
Cmd + , で設定 → 検索窓に git.autofetch → チェックを入れる。保存した瞬間に有効(再起動不要)。
オンにする(設定ファイル)
settings.json に "git.autofetch": true を1行追加。項目の区切りは末尾カンマ、最後の行はカンマ無し。
fetch は安全な操作
fetchは「見に行くだけ」で手元のファイルは一切変えない。だから自動で走らせて安全。実際に手元へ取り込むのは pull のときだけ。
触って確かめる:ステータスバー・シミュレーター
ボタンを押すと左下の記号がどう変わるか再現します。autofetch のオン/オフで「相手のpushにすぐ気づけるか」が変わるところを、切り替えて見比べてください。
autofetch:ON
⑂ main*
↓0
↑0
↻
要点:*(未コミット)と ↓N(相手のpush待ち)は別物。相手のコミットに気づきたいなら見るのは ↓N。そしてその ↓N を自動で出すのが autofetch=オン推奨。
⑤ プルリクの出し方と、通知の流れ
PRは「git push した後」に出します。出し方は3通り、通知は「指定した相手」に届きます。
出し方(pushした後)
A. GitHubサイト初心者向き
リポジトリを開くと、push直後に黄色い帯で 「Compare & pull request」ボタン → 押す → タイトル/説明を書く → 右の Reviewers で見てほしい人を指定 → 緑の 「Create pull request」。
B. VSCode
GitHub Pull Requests 拡張を入れていれば、pushすると「Create Pull Request」フォームが出る。記入して作成。
C. コマンドgh CLI
gh pr create。今日 PR #18 を作ったやり方。慣れると速い。
通知:誰に・どこへ届く?
レビュアーに指定した人例: haruto
GitHub右上の ベル🔔通知(github.com/notifications)+ 登録メールに届く。スマホのGitHubアプリにも(入れていれば)。
承認・コメントが付いたら→ 作成者(あなた)
今度は あなた のベル🔔+メールに返ってくる。やり取りはPRページに残る。
Slack
標準では来ない(GitHub↔Slack連携を入れていれば来る)。毎日GitHubを見ない相手には、Slackで一声が確実。
今日の例:PR #18 は haruto をレビュアー指定済み → haruto に GitHub通知+メールが飛んでいます。
⑥ 知っておく言葉ミニ辞典
場所の言葉
リポジトリrepo
コード一式+全履歴の入れ物。GitHub側と手元の両方に同じものがある。
originオリジン
「いつものGitHub置き場」の標準のあだ名。push origin=GitHubへ上げる。
クローンclone
GitHubのリポジトリを自分のPCへ丸ごと初回コピー。参加時に1回。
作業ツリーworking tree
いま手元で編集中のファイル群。未コミット=「未保存の下書き」。
手元で保存する言葉
ステージングgit add
「次のコミットに含める分」を選ぶ。今日 middleware.ts だけ選べたのがこれ。
コミットcommit
選んだ変更をメッセージ付きで手元の履歴に保存。まだGitHubには無い。
ブランチbranch
作業用の枝。本流を汚さず変更を育てる場所。今日の mock-route-1055。
main本流
みんなが共有する正式な幹。完成したものだけが合流する。
手元 ⇄ GitHub
プッシュpush
手元のコミットをGitHubへ上げる。ここで初めて外に出る。
フェッチfetch
GitHub側の最新を「見るだけ」取得(手元はまだ変えない)。
プルpull
最新を取り込んで手元を更新。他人の変更を受け取るのがこれ。
オートフェッチgit.autofetch
VSCodeが裏で定期的にfetchする設定。初期はオフ。オンで相手のpushに ↓N で自動的に気づける。
チームで合流する言葉
プルリクエストPR
「mainに入れたい」提案+レビューの場。出してもmainはまだ変わらない。
レビュー / 承認approve
仲間が中身を確認しOKを出す。今日 haruto に依頼したのがこれ。
マージmerge
承認されたPRをmainへ合流。ここで初めて本流入り。
コンフリクトconflict
2人が同じファイルの同じ行を直すと発生。違うファイルなら起きない。
ブランチ保護branch protection
mainを勝手に変えさせない安全装置。今日マージが止まった理由。
⑦ つまずきポイントは2つだけ
コンフリクト(衝突):2人が同じファイルの同じ行を編集して合流すると発生。「どっち採用?」を人が選んで直す。→ 違うファイルなら起きない。
ブランチ保護でマージが止まる:mainは承認1つ無いとマージ不可。事故防止の良い仕組み。今日まさにこれで止まり、いま haruto の承認待ち。
⑧ 1回ぶんの流れ(コピペ用)
- 最新のmainを取り込む
git pull
- 作業用ブランチを作る
git checkout -b 機能の名前
- コードを編集(作業ツリー)
- 含める分を選ぶ
git add ファイル名
- 手元に保存
git commit -m "何をしたか"
- GitHubへ上げる
git push -u origin 機能の名前
- PRを作る(mainに入れたいと提案・レビュアー指定)
- レビュー・承認
- マージ(mainへ合流)
- 他の人は次の
git pull で自動的に受け取る