Gitリモート追加時の「fatal: remote origin already exists」エラーの修正方法

beginner📦 Git2026-05-13| Git 2.x(Linux、macOS、Windows)— すべてのシェル対応(bash、zsh、PowerShell、Git Bash)

Error Message

fatal: remote origin already exists.
#git#remote#origin

エラーの内容

git remote add origin <url> を実行すると、Gitが次のエラーで処理を止めます:

fatal: remote origin already exists.

このエラーの多くは、既存のリポジトリを新しいホストに向け直そうとしたときに発生します。たとえば、GitHubからGitLabへの移行、他人のプロジェクトのフォーク、またはリポジトリをクローンして自分のアカウントに接続し直そうとした場合などです。

なぜこのエラーが起きるのか

Gitはリモート情報を .git/config に保存します。origin という名前のリモートが既に登録されている場合(以前の git remote addgit clone によって自動的に作成された場合)、Gitは同じ名前のリモートを新たに作成することを拒否します。2回目の呼び出しを更新ではなく競合として扱うためです。

主な原因:

  • リポジトリをクローンした後、別のURLで origin を再度追加しようとした。
  • 同じリポジトリで git remote add origin を2回実行した。
  • セットアップスクリプトが origin の存在を確認せずに追加しようとした。
  • GitHubからGitLab(またはその逆)へ移行する際に set-url の代わりに add を使用した。

修正方法1:リモートURLを更新する(最も簡単な方法)

origin は存在するが、URLが間違っている場合は add ではなく set-url を使います:

git remote set-url origin https://github.com/your-username/your-repo.git

SSHの場合:

git remote set-url origin git@github.com:your-username/your-repo.git

これだけでURLが置き換わります。ブランチ、コミット、ローカル設定はすべてそのまま保持されます。

修正方法2:削除してから再追加する

完全にリセットしたい場合は、リモートをいったん削除してから新しく追加します:

git remote remove origin
git remote add origin https://github.com/your-username/your-repo.git

**重要:**リモートを削除しても、ローカルのコミットやブランチには影響しません。.git/config のエントリが削除されるだけで、作業内容は安全に保持されます。

修正方法3:古いリモートをリネームして両方を保持する

移行中に古いリモートもしばらく必要な場合は、削除せずにリネームします:

git remote rename origin old-origin
git remote add origin https://github.com/your-username/new-repo.git

これで2つのリモートが作成されます。old-origin が以前のホストを指し、origin が新しいホストを指します。古いリモートからプルして、新しいリモートにプッシュできます。移行期間中に便利な方法です。

修正の確認

設定済みのすべてのリモートとURLを確認するには:

git remote -v

正常に更新された場合、次のように表示されます:

origin  https://github.com/your-username/your-repo.git (fetch)
origin  https://github.com/your-username/your-repo.git (push)

リネームした場合は、両方のリモートが表示されます:

old-origin  https://gitlab.com/your-username/old-repo.git (fetch)
old-origin  https://gitlab.com/your-username/old-repo.git (push)
origin      https://github.com/your-username/new-repo.git (fetch)
origin      https://github.com/your-username/new-repo.git (push)

次に、リモートに実際に接続できるか確認します:

git fetch origin

エラーが出なければ成功です。出力が空でも問題ありません。取得するものが何もないことを意味するだけです。

設定ファイルを直接確認する

ディスク上の実際の内容を確認したい場合は、.git/config を直接開きます:

cat .git/config

リモートエントリは通常このような形式になっています:

[remote "origin"]
    url = https://github.com/your-username/your-repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

最終手段としてこのファイルを直接編集することもできますが、git remote コマンドを使う方が安全です。設定ファイルにタイポが1つあるだけで、リモート設定全体が壊れる可能性があります。

スクリプトでエラーを防ぐ

ブートストラップスクリプトを作成する場合は、git remote add を盲目的に呼び出す前にチェックを追加しましょう:

REMOTE_URL="https://github.com/your-username/your-repo.git"

if git remote get-url origin >/dev/null 2>&1; then
  git remote set-url origin "$REMOTE_URL"
else
  git remote add origin "$REMOTE_URL"
fi

origin が存在する場合はURLを更新し、存在しない場合は新規作成します。このパターンで両方のケースに対応でき、スクリプトを何度実行してもfatalエラーが発生しません。

クイックリファレンス

  • URLを変更する: git remote set-url origin <new-url>
  • 完全にリセットする: git remote remove origin を実行後、git remote add origin <url>
  • 古いリモートを残しつつ新しいものを追加: git remote rename origin old-origin を実行後、git remote add origin <url>
  • 現在の状態を確認する: git remote -v

Related Error Notes