1.3 リモートリポジトリとの連携
Git はローカルだけでも動きますが、チーム開発では リモートリポジトリ(GitHub)との連携 が欠かせません。
このセクションでは、リモートとのやり取りに使うコマンドを深掘りしていきます 🌐
リモートリポジトリの基本
Section titled “リモートリポジトリの基本”リモートとは何か?
Section titled “リモートとは何か?”リモートリポジトリ とは、ネットワーク上にあるリポジトリのことです。
GitHub、GitLab、Bitbucket などのサービスがリモートリポジトリをホスティングしています。
flowchart LR
subgraph "あなたのPC"
L["💾 ローカルリポジトリ"]
end
subgraph "GitHub"
R["☁️ リモートリポジトリ
(origin)"]
end
L -- "git push →" --> R
R -- "← git fetch / pull" --> L
style L fill:#FFF3E0,stroke:#FB8C00,color:#E65100
style R fill:#F3E5F5,stroke:#8E24AA,color:#4A148C
リモートの情報を確認する
Section titled “リモートの情報を確認する”# 登録されているリモートの一覧git remote -vorigin https://github.com/your-org/your-repo.git (fetch)origin https://github.com/your-org/your-repo.git (push)リモートの追加・変更・削除
Section titled “リモートの追加・変更・削除”# リモートを追加git remote add upstream https://github.com/original/repo.git
# リモートのURLを変更git remote set-url origin https://github.com/new-org/repo.git
# リモートを削除git remote remove upstream
# リモートの詳細情報を表示git remote show originpush —set-upstream を理解する
Section titled “push —set-upstream を理解する”1.1 でも少し触れましたが、ここでもう少し深く理解しましょう。
upstream(追跡ブランチ)とは?
Section titled “upstream(追跡ブランチ)とは?”upstream とは、ローカルブランチが「追跡している」リモートブランチのことです。
この紐づけがあることで、git push や git pull を 引数なし で実行できます。
flowchart LR
subgraph "ローカル"
LB["feature/login
(ローカルブランチ)"]
end
subgraph "リモート (origin)"
RB["origin/feature/login
(リモート追跡ブランチ)"]
end
LB -- "upstream設定
git push -u" --> RB
RB -- "自動で対応" --> LB
style LB fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
style RB fill:#F3E5F5,stroke:#8E24AA,color:#4A148C
upstream の設定方法
Section titled “upstream の設定方法”# 初回 push 時に upstream を設定(最も一般的)git push --set-upstream origin feature/login# 略記git push -u origin feature/login
# 2回目以降は引数不要git pushgit pullupstream の確認
Section titled “upstream の確認”# 各ブランチの追跡情報を表示git branch -vv develop e4f5g6h [origin/develop] ヘッダーのデザインを修正* feature/login a1b2c3d [origin/feature/login] ログインページ追加 main m0n1o2p [origin/main] 初期コミット[origin/feature/login] の部分が、追跡先のリモートブランチです。
fetch と pull の違い
Section titled “fetch と pull の違い”ここが 混乱しやすいポイント です。
図を見ながらしっかり理解しましょう。
git fetch ─ 情報だけ取ってくる
Section titled “git fetch ─ 情報だけ取ってくる”fetch は、リモートの最新情報を ダウンロードするだけ です。
作業ディレクトリやローカルブランチには 一切影響しません。
git fetch origingit pull ─ 取ってきてマージまでする
Section titled “git pull ─ 取ってきてマージまでする”pull は、fetch + merge を 一度に行う コマンドです。
# この2つは同じ動作git pull origin develop
# ↓ と同じgit fetch origingit merge origin/developflowchart TD
subgraph "git fetch"
R1["☁️ リモート"] -- "① 最新情報を取得" --> T1["🔍 リモート追跡ブランチ
(origin/develop)"]
T1 -. "② 作業ディレクトリは
変わらない" .-> W1["🖥️ 作業ディレクトリ"]
end
subgraph "git pull"
R2["☁️ リモート"] -- "① 最新情報を取得" --> T2["🔍 リモート追跡ブランチ
(origin/develop)"]
T2 -- "② 自動でマージ" --> W2["🖥️ 作業ディレクトリ"]
end
style R1 fill:#F3E5F5,stroke:#8E24AA,color:#4A148C
style R2 fill:#F3E5F5,stroke:#8E24AA,color:#4A148C
style T1 fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
style T2 fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
style W1 fill:#E8F5E9,stroke:#43A047,color:#1B5E20
style W2 fill:#E8F5E9,stroke:#43A047,color:#1B5E20
どっちを使えばいい?
Section titled “どっちを使えばいい?”| 状況 | おすすめ | 理由 |
|---|---|---|
| リモートの状況を確認したい | fetch | 安全に確認できる |
| 作業開始前に最新化したい | pull | 手軽に最新化 |
| 競合が起きそうなとき | fetch → 確認 → merge | 慎重に対応できる |
| CI/CD などの自動化 | pull | シンプルに統一 |
pull —rebase という選択肢
Section titled “pull —rebase という選択肢”pull 時に --rebase をつけると、merge の代わりに rebase で統合します。
直線的な履歴を保ちたいチームでよく使われます。
# merge の代わりに rebase で統合git pull --rebase origin develop
# デフォルトの pull を rebase にする設定git config --global pull.rebase trueリモートブランチの管理
Section titled “リモートブランチの管理”リモートブランチの一覧を見る
Section titled “リモートブランチの一覧を見る”# リモートブランチの一覧git branch -r
# ローカルとリモートの両方を表示git branch -a remotes/origin/develop remotes/origin/feature/login remotes/origin/feature/signup remotes/origin/main不要になったリモートブランチを掃除する
Section titled “不要になったリモートブランチを掃除する”マージ済みのブランチが GitHub 上で削除されても、ローカルの追跡情報は残ったままです。
定期的にお掃除しましょう。
# リモートで削除されたブランチの追跡情報を削除git fetch --prune
# 略記git fetch -p
# デフォルトで prune を有効にするgit config --global fetch.prune true| コマンド | 用途 |
|---|---|
git remote -v | リモートの一覧を表示 |
git push -u origin <branch> | upstream を設定して push |
git fetch origin | リモートの最新情報を取得(マージしない) |
git pull origin <branch> | リモートの最新を取得+マージ |
git pull --rebase | リモートの最新を取得+rebase |
git branch -vv | 追跡ブランチの確認 |
git fetch --prune | 削除済みリモートブランチの追跡情報を削除 |