Stage 1・初心者編 ー Lesson 1-6
リモートと連携しよう — git push と git pull
git remote add でリモートと紐付け、git push / git pull でコミットを送受信する
💡 たとえるなら
セーブデータをクラウドにアップロード(push)して保管・共有。パソコンが壊れても、クラウドからダウンロード(pull)すれば元どおりに復元できる
ここまではすべて 自分のパソコンの中だけ で完結していました。最後に、コミット履歴を リモートリポジトリ に保存する方法を学びます。これでパソコンが壊れても安心、しかも他のパソコンやチームと共有できるようになります。
リモートリポジトリってなに?
「Gitリポジトリを置いておけるサーバー上の場所」のことを リモート(リポジトリ) と呼びます。GitHub・GitLab・Bitbucket・社内のGitサーバー、すべてリモートの一例です。仕組みはどれも同じで、Gitコマンドからは「URL またはローカルパス」で指定するだけ。
ローカル ↔ リモートの仕組み
このレッスンでは、まず「練習用リモート」をパソコンの中に作って push/pull/clone を完全体験し、仕組みを掴んでから GitHub などの本物のリモートへ進みます。
まずは「練習用リモート」を手元に作ろう
たとえば最もメジャーな GitHub では、最初の push に 認証設定(SSH鍵または PAT) が必要です(認証方式はリモートやホスティングサービスによって異なります)。ここで詰まって先に進めなくなる初学者が多いです。
そこでまず、認証もネットも不要な「練習用リモート」 をパソコン内に作ります。動きは本物と全く同じ — バックアップ/復元の体験は変わりません。本物のクラウドに送る前に、自分専用のサーバーを机の中に置いて練習するイメージです。
同じパソコン上に置くため、パソコン破損時の保全や他者との共有は得られません(それは GitHub などの外部サーバーが担います)。ここでは push/pull/clone の 動き を体験することが目的です。
bare リポジトリを作る
git init --bare で「pushを受け取れる箱」を作ります。
通常の Git リポジトリは「作業ツリー(ファイルを直接編集する場所)」を持っています。そこへ外から push しようとすると、Git は安全装置として 拒否 します(
receive.denyCurrentBranch エラー)。bare リポジトリ は作業ツリーを持たない「受け取り専用の箱」なので、push をそのまま受け入れられます。GitHub のサーバー側も、実は bare リポジトリで動いています。
練習用リモートに送る:git remote add + git push
手元の my_project フォルダへ移動して、練習用リモートを登録します。
origin= リモートのニックネーム(慣習でoriginを使う)- ローカルパスも URL も、Git から見れば「指す場所」というだけ
いよいよ push します。認証なしで成功するのを体感してください。
-u= 「次回からはgit pushだけで送れるようにする」おまじない(最初の1回だけ)origin main= 「originというリモートのmainブランチに送る」
clone と pull を往復で体験する
もう一つの場所に clone して、双方向のやり取りを体験しましょう。
push → pull の往復が確認できました。これが Git の基本フローです。
git clone は git init + git remote add origin URL + git pull を1コマンドにまとめたもの。チームに参加するときの最初の一歩です。
本物のリモート(GitHub等)を使うには【発展】
練習用リモートで動きを掴んだら、origin のパスを GitHub の URL に差し替えるだけです。コマンドは全く同じ。
# ローカルパスの代わりに GitHub の URL を使う
git remote add origin https://github.com/yourname/my_project.git
git push -u origin main
ただし、GitHub は HTTPS のパスワード認証を 2021年8月に廃止しました。現在は以下のいずれかが必要です:
clone できる ≠ push できる
ここがハマりどころ。clone(読み取り)と push(書き込み)は権限が別 です。
公開リポジトリなら 誰でも可能。OSSプロジェクトを clone して手元で動かすのに権限は要りません。
非公開リポジトリは「メンバーに招待されている」など、読み取り権限が必要です。
remote: Permission to xxx/repo.git denied to user. fatal: unable to access ...: The requested URL returned error: 403
他人のOSSに貢献したいときは「fork」
OSSプロジェクトに改善を提案したい場合、本家には push 権限が無いので 「fork」 という仕組みを使います:
git clonegit push(自分のだから push できる)fork や Pull Request は GitHub特有の仕組み で、Git本体の機能ではありません。詳しくは GitHub のドキュメントを参照してください。
衝突(コンフリクト)という言葉だけ知っておこう
ローカルとリモートの両方で 同じファイルの同じ行 を別々に編集していると、Gitは「どっちを採用すればいいか分からない」と立ち止まります。これが 衝突(コンフリクト) です。怖そうな名前ですが、勝手に上書きしないように Git が安全装置として止めてくれているだけ。
初心者がいちばん最初に出会うのは、git push が拒否される パターンです:
リモート側に自分の知らないコミットがあると push は失敗します。慌てず、まず
git pull で最新を取り込んでから、もう一度 git push。これで多くのケースは解決します。
ファイルの 同じ行 を両側で編集していた場合は、git pull の段階で CONFLICT の文字が出て、ファイル内に <<<<<<< ======= >>>>>>> のマーカーが残ります。直し方の詳細は Stage 2-3「コンフリクトを解決する」 で扱うので、ここでは「そういう場面が来ることがある」とだけ覚えておけばOKです。
コマンド早見表
| コマンド | 何をする? |
|---|---|
| git init --bare -b main <path> | push を受け取れる bare リポジトリを作る |
| git remote add origin <URL or path> | リモートを登録する |
| git remote -v | 登録済みリモート一覧を表示 |
| git push -u origin main | ローカル→リモートへ送る |
| git pull origin main | リモート→ローカルへ取り込む |
| git clone <URL or path> | リモートを丸ごと取得して始める |
このレッスンのまとめ
git init --bare で練習用リモートを作れるgit remote add でリモートを登録できるgit push でローカルの変更をリモートに送れるgit pull でリモートの変更を取り込めるgit clone でリモートから始められる🎉 Stage 1 完走おめでとうございます!
次の Stage 2 — 中級編 では、ブランチ を切って機能ごとに作業を分け、間違いを安全に取り消す技術を身につけていきます。
✏️ 理解度チェック
各問題、選んだ瞬間に正解と解説が表示されます。気軽に試してください。
- Q1. リモートリポジトリのURLをローカルに登録するコマンドは?
- Q2. ローカルのコミットをリモートに送るコマンドは?
- Q3. リモートの最新変更を取り込むコマンドは?