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 またはローカルパス」で指定するだけ。

⚠️ ローカルだけ
💻 パソコンが壊れたら消える
🏠 1台のパソコンでしか作業できない
👤 チームと共有できない
✅ リモートあり
☁️ 外部サーバーに安全バックアップ
🌍 どのパソコンからでもアクセス可
👥 チームで共同作業できる

ローカル ↔ リモートの仕組み

ローカルリポジトリとリモートリポジトリの関係図: git push/pull/fetchの方向と役割を示す 自分のパソコン ローカルリポジトリ [v1] [v2] [v3] 手元のデータ git push ↑ アップロード git pull ↓ ダウンロード リモート サーバー上のリポジトリ [v1] [v2] [v3] どこからでもアクセス可 push / pull でコミット履歴を送受信する

このレッスンでは、まず「練習用リモート」をパソコンの中に作って push/pull/clone を完全体験し、仕組みを掴んでから GitHub などの本物のリモートへ進みます。


まずは「練習用リモート」を手元に作ろう

たとえば最もメジャーな GitHub では、最初の push に 認証設定(SSH鍵または PAT) が必要です(認証方式はリモートやホスティングサービスによって異なります)。ここで詰まって先に進めなくなる初学者が多いです。

そこでまず、認証もネットも不要な「練習用リモート」 をパソコン内に作ります。動きは本物と全く同じ — バックアップ/復元の体験は変わりません。本物のクラウドに送る前に、自分専用のサーバーを机の中に置いて練習するイメージです。

📌 練習用リモートの注意点
同じパソコン上に置くため、パソコン破損時の保全や他者との共有は得られません(それは GitHub などの外部サーバーが担います)。ここでは push/pull/clone の 動き を体験することが目的です。

bare リポジトリを作る

git init --bare で「pushを受け取れる箱」を作ります。

$ git init --bare -b main ~/remote-practice.git
Initialized empty Git repository in /home/yourname/remote-practice.git/
💡 なぜ --bare が必要?
通常の Git リポジトリは「作業ツリー(ファイルを直接編集する場所)」を持っています。そこへ外から push しようとすると、Git は安全装置として 拒否 します(receive.denyCurrentBranch エラー)。
bare リポジトリ は作業ツリーを持たない「受け取り専用の箱」なので、push をそのまま受け入れられます。GitHub のサーバー側も、実は bare リポジトリで動いています。

練習用リモートに送る:git remote add + git push

手元の my_project フォルダへ移動して、練習用リモートを登録します。

# 練習用リモートを origin として登録(URL の代わりにローカルパス)
$ git remote add origin ~/remote-practice.git
# 登録を確認
$ git remote -v
origin /home/yourname/remote-practice.git (fetch)
origin /home/yourname/remote-practice.git (push)
  • origin = リモートのニックネーム(慣習で origin を使う)
  • ローカルパスも URL も、Git から見れば「指す場所」というだけ

いよいよ push します。認証なしで成功するのを体感してください。

$ git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 256 bytes, done.
Branch 'main' set up to track remote branch 'main' from 'origin'.
  • -u = 「次回からは git push だけで送れるようにする」おまじない(最初の1回だけ)
  • origin main = 「origin というリモートの main ブランチに送る」

clone と pull を往復で体験する

もう一つの場所に clone して、双方向のやり取りを体験しましょう。

# 別の場所に clone("もう1台のパソコン" のつもりで)
$ git clone ~/remote-practice.git ~/clone-practice
Cloning into '/home/yourname/clone-practice'...
done.
# clone 側で編集 → commit → push
$ cd ~/clone-practice
$ echo "cloneから追記" >> memo.txt
$ git add memo.txt && git commit -m "cloneから変更"
$ git push origin main
# 元のリポに戻って pull → 変更が取り込まれる
$ cd ~/my_project
$ git pull origin main
$ cat memo.txt
はじめてのメモです
cloneから追記

push → pull の往復が確認できました。これが Git の基本フローです。

git clonegit 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月に廃止しました。現在は以下のいずれかが必要です:

SSH 鍵 — 事前に公開鍵を GitHub に登録する方式。設定は一度だけ、以後パスワード不要
Personal Access Token(PAT) — GitHub 上で発行するトークン。HTTPS 接続でパスワードの代わりに使う
設定手順はやや長いため、トラブル解決「始められない・接続できない」にまとめています。認証で詰まったらそちらを参照してください。

clone できる ≠ push できる

ここがハマりどころ。clone(読み取り)と push(書き込み)は権限が別 です。

📖 clone(読み取り)
公開リポジトリなら 誰でも可能。OSSプロジェクトを clone して手元で動かすのに権限は要りません。
非公開リポジトリは「メンバーに招待されている」など、読み取り権限が必要です。
✏️ push(書き込み)
リポジトリの所有者か、招待されたコラボレーターでないと拒否されます。権限がないと:
remote: Permission to xxx/repo.git denied to user.
fatal: unable to access ...: The requested URL returned error: 403

他人のOSSに貢献したいときは「fork」

OSSプロジェクトに改善を提案したい場合、本家には push 権限が無いので 「fork」 という仕組みを使います:

1. GitHub などで本家リポジトリを 「Fork」(自分のアカウント配下にコピーを作る)
2. 自分の fork を git clone
3. 修正してコミット → 自分の fork に git push(自分のだから push できる)
4. 本家へ 「Pull Request」 を送って、取り込みをお願いする

fork や Pull Request は GitHub特有の仕組み で、Git本体の機能ではありません。詳しくは GitHub のドキュメントを参照してください。


衝突(コンフリクト)という言葉だけ知っておこう

ローカルとリモートの両方で 同じファイルの同じ行 を別々に編集していると、Gitは「どっちを採用すればいいか分からない」と立ち止まります。これが 衝突(コンフリクト) です。怖そうな名前ですが、勝手に上書きしないように Git が安全装置として止めてくれているだけ。

初心者がいちばん最初に出会うのは、git push が拒否される パターンです:

😰 push したら「rejected」と言われた
リモート側に自分の知らないコミットがあると 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> リモートを丸ごと取得して始める

このレッスンのまとめ

できるようになったこと
リモートリポジトリ の役割がわかった(GitHubなどはその一例)
git init --bare で練習用リモートを作れる
git remote add でリモートを登録できる
git push でローカルの変更をリモートに送れる
git pull でリモートの変更を取り込める
git clone でリモートから始められる
✅ 衝突(コンフリクト)という概念があると知った(詳細は Stage 2-3 で)

🎉 Stage 1 完走おめでとうございます!

これでGitの基本フローはマスターです 🚀
1人でコミットしてリモートに送るところまで、すべてできるようになりました。
次の Stage 2 — 中級編 では、ブランチ を切って機能ごとに作業を分け、間違いを安全に取り消す技術を身につけていきます。

✏️ 理解度チェック

0 / 3 正解

各問題、選んだ瞬間に正解と解説が表示されます。気軽に試してください。

  1. Q1. リモートリポジトリのURLをローカルに登録するコマンドは?
  2. Q2. ローカルのコミットをリモートに送るコマンドは?
  3. Q3. リモートの最新変更を取り込むコマンドは?