この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:12:00

タイトル: ローカルとリモートリポジトリの有無を同期
SEOタイトル: git remote 完全ガイド — add/rm/-v/set-url/rename/prune、origin と upstream の使い分け

この記事の要点
  • git remote はローカルが知っている「リモート (リポジトリの別名)」を管理するコマンド
  • 基本: git remote -v で一覧、git remote add origin URL で追加、git remote rm name で削除
  • origin = 自分の fork や clone 元、upstream = 本家リポジトリ。OSS でよく使う 2 つ
  • URL 変更は git remote set-url origin URL (HTTPS↔SSH 切替や GitLab→GitHub 移行時)
  • fetch / pull / push でリモートとローカルの内容を同期。fetch はローカル変更に影響を与えず安全
  • 消されたリモートブランチを掃除: git remote prune origin または git fetch --prune

git remote とは

Git のリモート (remote)とは「ローカルリポジトリが認識している他のリポジトリの別名」のことです。git clone 直後は通常 origin という名前で clone 元が登録されます。

「リモート」は名前 ↔ URL の対応表に過ぎず、登録するだけでは何もダウンロードされません。実際の同期は fetch / pull / push で行います。

現在のリモート一覧を見る

# 名前だけ
git remote
# origin

# URL も
git remote -v
# origin  git@github.com:user/repo.git (fetch)
# origin  git@github.com:user/repo.git (push)

# 詳細 (HEAD ブランチ、トラッキング設定など)
git remote show origin
# * remote origin
#   Fetch URL: git@github.com:user/repo.git
#   Push  URL: git@github.com:user/repo.git
#   HEAD branch: main
#   Remote branches:
#     main     tracked
#     develop  tracked
#   Local branch configured for 'git pull':
#     main merges with remote main
#   Local refs configured for 'git push':
#     main pushes to main (up to date)

リモートを追加 / 削除

# 追加
git remote add origin git@github.com:user/repo.git

# 別名で追加 (本家を upstream として)
git remote add upstream git@github.com:original-owner/repo.git

# 削除
git remote rm origin
git remote remove origin   # rm の別名

# リネーム
git remote rename origin github

URL を変更する: set-url

HTTPS で clone したものを SSH に切り替えたい、Bitbucket から GitHub へ移管した、独自ドメインに変えた、などの場面で頻用します。

# 変更
git remote set-url origin git@github.com:user/repo.git

# push 専用に別 URL (fetch は元のまま)
git remote set-url --push origin git@github.com:user/repo.git

# 確認
git remote -v

典型的なフロー: clone から push まで

# 1. 既存リモートを clone
git clone git@github.com:user/repo.git
cd repo
git remote -v   # origin 登録済

# ―――― あるいは ――――

# 1'. ローカルで作って後からリモート登録
mkdir myproject && cd myproject
git init
echo "# myproject" > README.md
git add README.md
git commit -m "Initial commit"

# 2. GitHub などで空リポジトリを作っておき URL を控える

# 3. リモートを登録
git remote add origin git@github.com:user/myproject.git

# 4. 初回 push (-u で upstream 紐付け)
git branch -M main
git push -u origin main

# 5. 以後は短く
git push
git pull

fetch / pull / push の役割

コマンド動作ローカル変更への影響
git fetchリモートの最新を取り込む (origin/main 等の追跡ブランチを更新)★ なし (安全)
git pullfetch + 現在のブランチに merge (デフォルト) or rebaseあり (自動マージ)
git pushローカルのコミットをリモートに送る
git fetch --prunefetch + 消えたリモートブランチをローカル追跡から削除追跡情報のみ

origin と upstream: OSS で fork する場合

OSS にコントリビュートするときは、本家を upstream、自分の fork を origin として登録するのが定番です。

# 1. 自分の fork を clone (origin = fork)
git clone git@github.com:myuser/awesome.git
cd awesome

# 2. 本家を upstream として追加
git remote add upstream git@github.com:upstream-owner/awesome.git

git remote -v
# origin    git@github.com:myuser/awesome.git         (fetch/push)
# upstream  git@github.com:upstream-owner/awesome.git (fetch/push)

# 3. 本家の更新を取り込む (upstream → ローカル main → fork へ push)
git checkout main
git fetch upstream
git merge upstream/main
# または
git rebase upstream/main

git push origin main

# 4. 機能ブランチで作業 → fork へ push → PR
git checkout -b feature/x
# ... commit ...
git push -u origin feature/x

複数リモートの一例

# 同じプロジェクトを GitHub と GitLab の両方にバックアップ
git remote add github git@github.com:user/repo.git
git remote add gitlab git@gitlab.com:user/repo.git

# 個別に push
git push github main
git push gitlab main

# 両方に一度に push したい場合
# origin の Push URL を複数登録する技
git remote set-url --add --push origin git@github.com:user/repo.git
git remote set-url --add --push origin git@gitlab.com:user/repo.git
git push origin main   # 両方に飛ぶ

消えたリモートブランチを掃除

同僚がリモートでブランチを削除しても、ローカルの origin/branch は残り続けます。これを掃除するのが --prune です。

# Dry-run で何が消えるか確認
git remote prune origin --dry-run

# 実行
git remote prune origin

# fetch と同時に prune (こちらが手軽)
git fetch --prune
git fetch -p

# pull に統合
git config --global fetch.prune true   # 以後 fetch 時に常に prune

# それでもローカルブランチは残るので個別に削除
git branch -d feature/old   # マージ済みなら -d
git branch -D feature/old   # 未マージでも強制 -D

トラッキング (upstream) 設定

ローカルブランチがどのリモートブランチを追跡するかを設定すると、git push / git pull を引数なしで使えるようになります。

# 初回 push で紐付け
git push -u origin feature/x

# 既存ブランチに後から設定
git branch --set-upstream-to=origin/feature/x feature/x
git branch -u origin/feature/x   # 短縮形

# 確認
git branch -vv
# * feature/x abcd123 [origin/feature/x] commit msg
#   main       efgh456 [origin/main]      another commit

# 解除
git branch --unset-upstream

よくあるトラブル

症状原因対処
fatal: remote origin already exists.add しようとしたが既にあるgit remote set-url で上書き or rm してから add
fatal: 'origin' does not appear to be a git repositoryリモート未登録git remote -v で確認、未登録なら add
remote: Permission to ... deniedSSH 鍵 / PAT 認証エラーssh -T git@github.com で鍵確認、PAT 期限確認
The requested URL returned error: 403HTTPS で credential helper が古い PAT を握りっぱなしgit credential-manager erase / OS のキーチェーン削除
push したのに反映されていない別ブランチや別リモートに飛んだgit remote -vgit branch -vv で確認

FAQ

Q: origin という名前を変えたい
A: git remote rename origin github で OK。以後は git push github main のように使えます。

Q: 移管したけど CI が古い URL を見続けている
A: ローカル / CI 両方で git remote set-url を実行する必要があります。CI 側はリポジトリ設定の Webhook / 連携 URL も新リポジトリに差し替えてください。

Q: git remote updategit fetch --all の違い
A: ほぼ同じです。git remote updateすべてのリモートfetch します。git fetch --all も同じ動作で、現代は後者が一般的です。