BACKEND2026-04-09📖 4分

git remote 完全ガイド|追加・削除・URL変更・ブランチ整理の全コマンド

git remote 完全ガイド|追加・削除・URL変更・ブランチ整理の全コマンド

`git remote` の追加・削除・URL変更・確認から、リモートブランチの削除・復元、`fetch --prune` によるクリーンアップまで実務で必要な操作を網羅。

髙木 晃宏

代表 / エンジニア

👨‍💼

git remote まわりの操作は、GitHubへの移行、組織名変更、マージ済みブランチの掃除など、チーム開発で定期的に必要になります。とはいえ removerm のどちらが正しいか、リモート自体の削除とリモート上のブランチ削除はどう違うか、といった地味なところで手が止まることもあります。

この記事は git remote のサブコマンドとリモートブランチ操作を一通りまとめた早見表的な記事です。裏で書き換えている .git/config の中身や、よくあるエラーの対処にも触れます。

git remoteとは

git remote が管理しているのは、ローカルリポジトリが覚えている「リモートリポジトリへのブックマーク」です。GitHub上のリポジトリそのものではなく、URLに付けた短い別名の一覧だと思えば概ね合っています。git clone すると自動で作られる origin も、単にクローン元URLに付いた別名です。

この情報は .git/config に書かれています。

[remote "origin"] url = git@github.com:example/repo.git fetch = +refs/heads/*:refs/remotes/origin/*

以降の各コマンドは、このセクションを書き換えるためのインターフェースに過ぎません。コマンドでうまくいかないとき、.git/config を直接開いて直せるのはこのためです。

originupstream は慣習で、それぞれ「自分のクローン元」「フォーク元の本家」を指します。強制ではないので、好きな名前で構いません。

現状を確認する|git remote -v

# 登録されているリモート名だけ $ git remote origin upstream # URL付きで確認(実務でよく使う) $ git remote -v origin git@github.com:myorg/myrepo.git (fetch) origin git@github.com:myorg/myrepo.git (push) upstream git@github.com:original/myrepo.git (fetch) upstream git@github.com:original/myrepo.git (push)

(fetch)(push) が別行で出るのは、push先だけ別URLに切り替えられる仕様があるためで、通常は同一になります。

詳細を見たいときは show を使います。

$ git remote show origin * remote origin Fetch URL: git@github.com:myorg/myrepo.git Push URL: git@github.com:myorg/myrepo.git HEAD branch: main Remote branches: main tracked feature/new-auth tracked stale-branch stale (use 'git remote prune' to remove)

stale は、リモート側で既に消されているのにローカルの追跡ブランチだけ残っている状態です。掃除方法は後段の git fetch --prune で扱います。

リモートを追加する|git remote add

# 構文 git remote add <リモート名> <URL> # フォーク運用で本家を upstream として追加 git remote add upstream git@github.com:original/myrepo.git

HTTPSとSSHは組織のポリシーで選びます。PATの期限管理を避けたい個人環境ではSSHのほうが楽です。

# HTTPS git remote add origin https://github.com/myorg/myrepo.git # SSH git remote add origin git@github.com:myorg/myrepo.git

追加後は git remote -v で期待通りのURLかを確認します。typoで別の組織を指していた、というのは時々起きるミスです。

リモートを削除する|git remote remove / rm

この操作で消えるのはローカル側のブックマークだけです。GitHub上のリポジトリは消えません。リモート側のリポジトリを削除したい場合は各サービスの管理画面から行います(手順は後述)。

# 推奨 git remote remove origin # 古い書き方(同じ動作) git remote rm origin

removerm は完全に同じです。Git 1.8で remove がエイリアスとして追加されたという経緯の違いで、どちらを書いても問題ありません。

削除すると .git/config[remote "origin"] セクションが丸ごと消えます。これに連動して refs/remotes/origin/* のリモート追跡ブランチも削除されます。ローカルの作業ブランチやコミット自体はそのまま残ります。

よくある用途は、フォーク元から clone した直後に origin を自分のフォークへ差し替える場面です。

# 旧originを削除 git remote remove origin # 新しいoriginを設定 git remote add origin git@github.com:your-account/your-repo.git # 確認 git remote -v

URLだけ差し替えたいなら、次の set-url のほうが手数が少なくて済みます。

.git/config を直接編集する

スクリプトから一括で書き換えたいときや、何らかの理由でコマンドが効かないときは、.git/config を直接開くのが最短です。

git config --edit

[remote "..."] と、そのインデント行をまとめて消せば同じ状態になります。

リモートリポジトリ自体を削除したい場合

GitHubやGitLab上のリポジトリそのものを削除したい場合は、Gitコマンドではなく各プラットフォームのWeb UIで行います。

  • GitHub: Settings → Danger Zone → Delete this repository
  • GitLab: Settings → General → Advanced → Delete project

リポジトリ削除は不可逆で、Issue・Pull Request・Wikiなども全て失われます。実行前にアーカイブかバックアップを取ってください。

リモートURLを変更する|git remote set-url

登録名は維持したままURLだけ差し替えます。組織名変更、HTTPS↔SSH切り替え、ホスト移行などで使います。

# HTTPS → SSH git remote set-url origin git@github.com:myorg/myrepo.git # 組織名変更に追従 git remote set-url origin git@github.com:new-org/new-repo.git

removeadd でも同じ結果になりますが、set-url なら追跡ブランチ情報を保持したまま差し替えられます。

push先だけ別URLにする

ミラーリング運用で「fetchは本家、pushは自社フォーク」のような構成にしたいときは --push を付けます。

git remote set-url --push origin git@github.com:myorg/fork.git

この状態で git remote -v を見ると、(fetch)(push) のURLが別々になっています。

リモート名を変更する|git remote rename

git remote rename origin old-origin

origin から逸脱するとCIスクリプトやドキュメントの前提と噛み合わなくなることがあるので、必要最小限に留めるのが無難です。複数リモートを抱えた移行期に一時的にリネームする、くらいが現実的な用途です。

リモートブランチを削除する|git push origin --delete

ここからは話が変わって、リモートリポジトリの中にあるブランチそのものを消す操作です。前項までの「リモート登録(ブックマーク)を消す」とは別の操作なので注意してください。

# 推奨 git push origin --delete feature/old-branch # 旧形式(コロン記法、今でも有効) git push origin :feature/old-branch

コロン記法は「空のものを feature/old-branch に push する=削除」という意味ですが、直感的ではないので、新規プロジェクトでは --delete のほうが読みやすいです。

削除前にマージ済みか確認する

未マージのブランチを消すと、GitHub/GitLab側のreflog保持期間を過ぎた時点で復旧不可能になります。削除前には --merged / --no-merged で状態を確認します。

# mainにマージ済みのリモートブランチ一覧 git branch -r --merged origin/main # mainにマージされていないリモートブランチ一覧 git branch -r --no-merged origin/main

ローカルブランチを削除する

リモートブランチを削除してもローカルの作業ブランチは残ります。不要なら別途削除します。

# マージ済みなら削除 git branch -d feature/old-branch # 未マージで強制削除 git branch -D feature/old-branch

-d(小文字)はマージ済みのみ削除可能で、未マージブランチを指定するとエラーになります。-D(大文字)は未マージでも削除するため、内容を確認してから使います。

マージ済みローカルブランチを一括削除する

溜まったマージ済みブランチをまとめて消したいときのワンライナーです。

git branch --merged main | grep -v "main" | xargs git branch -d

頻繁に使うならエイリアスに登録しておくと手数が減ります。

git config --global alias.cleanup '!git branch --merged main | grep -v "main" | xargs git branch -d' # 以降は git cleanup

リモートとローカル両方を削除する手順

実務ではリモートとローカルの両方を同時に消すケースが大半です。次の3ステップをセットで実行します。

# 1. リモートブランチを削除 git push origin --delete feature/old-branch # 2. ローカルブランチを削除 git branch -d feature/old-branch # 3. リモート追跡ブランチの参照を整理 git fetch --prune

GitHubのPull Request設定で「Automatically delete head branches」を有効にしておけば、マージ時に1のステップが自動化されます。

古いリモート追跡ブランチを掃除する|git fetch --prune

チーム開発では、他のメンバーがリモートブランチを削除しても、自分のローカルには refs/remotes/origin/* の参照が残り続けます。

# stale なリモート追跡ブランチを削除 git fetch --prune # 短縮形 git fetch -p # 事前に何が消えるか確認 git remote prune origin --dry-run

fetchのたびに自動で掃除したい場合は、設定で常時有効にできます。

git config --global fetch.prune true

これを入れておくと git fetch するだけで掃除されます。長く使うリポジトリほど効いてきます。

追跡関係だけを解除する

ブランチ単位で「このローカルブランチが origin/xxx を追跡している」関係だけを切りたいときは、git remote remove ではなく git branch --unset-upstream を使います。

# 現在のブランチの追跡関係を解除 git branch --unset-upstream # 特定ブランチの追跡関係を解除 git branch --unset-upstream feature/experimental

逆に張り直すときはこちら。

git branch -u origin/main

この操作で書き換わっているのは .git/config[branch "..."] セクションです。

[branch "main"] remote = origin merge = refs/heads/main

ここが消えたり壊れたりしている状態で git push すると no upstream branch エラーが出ます。

削除したブランチを復元する

誤って削除した場合でも、多くのケースで復元は可能です。

ローカルブランチの復元

git reflog で削除直前のコミットハッシュを特定し、そこからブランチを作り直します。

# reflogで削除されたブランチのコミットを探す git reflog # 見つかったコミットハッシュからブランチを再作成 git checkout -b feature/old-branch abc1234

reflogはデフォルトで90日間保持されるため、よほど古くなければ遡れます。

リモートブランチの復元

削除直後なら、チームメンバーのローカルにブランチが残っている可能性があります。誰かのローカルから push してもらうのが一番早いです。

誰のローカルにもない場合は、自分のreflogから復元して push し直します。

# reflogからコミットハッシュを特定 git reflog # ローカルブランチを再作成 git checkout -b feature/old-branch abc1234 # リモートに再push git push origin feature/old-branch

よくあるエラー

fatal: remote origin already exists

同名のリモートが登録済みの状態で git remote add origin ... を実行したときに出ます。

# URLを差し替えたいだけなら set-url のほうが後腐れない git remote set-url origin <新しいURL> # 登録ごと置き換えたいなら remove → add git remote remove origin git remote add origin <新しいURL>

fatal: No such remote 'origin'

登録されていない名前を指定したときに出ます。git remote -v で登録状況とタイポを確認します。

error: failed to push some refs

リモートに自分が知らないコミットが既にある状態で、そのまま上書きできないためpushが拒否されます。別のメンバーが先にpushしていた、というのが典型的な原因です。

# リモートの変更を取り込んでから push し直す git pull --rebase git push

set-url で向き先を書き換えた直後は、誤って別リポジトリに push しようとしている可能性もあります。git remote -v で push先を併せて確認してください。

認証エラー(SSH鍵 / PAT)

HTTPSならPATの期限切れ、SSHなら鍵が ~/.ssh/ に置かれていない、というのが典型です。

# SSH疎通確認 ssh -T git@github.com

HTTPSの場合はブラウザで対象サービスに入り直してPATを再発行します。

チーム開発での運用メモ

  • マージ後の自動削除を有効化: GitHubの「Automatically delete head branches」設定で、マージ時にリモートブランチを自動削除
  • 命名規則の統一: feature/bugfix/hotfix/ などのプレフィックスを揃えると一括削除の対象判定が楽になる
  • 定期的な棚卸し: 月次や隔週で git cleanup エイリアスを回す
  • 保護ブランチ: main/develop には Branch Protection Rules を設定し誤削除を防ぐ
  • fetch.prune = true を全員に: .gitconfig に入れておくと stale なリモート追跡ブランチが溜まらない

コマンド早見表

やりたいことコマンド
リモート一覧git remote -v
詳細を見るgit remote show origin
リモート追加git remote add <name> <url>
リモート削除git remote remove <name>
URL変更git remote set-url <name> <url>
push先だけ変更git remote set-url --push <name> <url>
リモート名変更git remote rename <old> <new>
リモートブランチ削除git push origin --delete <branch>
ローカルブランチ削除git branch -d <branch> / -D
古い追跡ブランチ掃除git fetch --prune
fetch時に自動掃除git config --global fetch.prune true
追跡関係を解除git branch --unset-upstream
追跡関係を張るgit branch -u origin/<branch>
削除ブランチ復元git refloggit checkout -b <branch> <SHA>

git remote 周りは結局 .git/config[remote "..."] を書き換えているだけなので、コマンドを忘れてもファイルを直接開けば対処できます。

リモートブランチをローカルに取得して作業する手順は Gitでリモートブランチをチェックアウトする方法、リポジトリからファイルを削除する手順は Gitでファイルを削除する方法 をあわせてご覧ください。

aduce株式会社では、Git運用の標準化を含む開発プロセスの最適化をIT顧問サービスとしてご支援しています。チームのGitワークフローを改善したいとお考えでしたら、ぜひお問い合わせからご相談ください。