読者です 読者をやめる 読者になる 読者になる

ponkiti's blog

主に自分用、イベント参加メモや備忘録として利用

Gitで fatal: remote origin already exists. というメッセージが出る場合

対処法

git remote add origin 〜を実行してfatal: remote origin already exists.が出た場合、git remote rm originでoriginを削除し、再度originを登録すればよい。

$ git remote rm origin
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
$ git push -u origin master

整理

git remote add origin 〜.git/configファイルに [remote "origin"] の設定を追記するコマンドなので、すでに.git/configファイルに [remote "origin"] の設定が存在する場合は、(当たり前なのだが・・・)fatal: remote origin already exists.となる。

$ cat .git/config
[core]
     repositoryformatversion = 0
     filemode = true
     bare = false
     logallrefupdates = true
[remote "origin"]
        url = ssh://git@github.com:ユーザ名/リポジトリ名.git
        fetch = +refs/heads/*:refs/remotes/origin/*

$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
fatal: remote origin already exists.

この状態でgit remote rm originすると、.git/configファイルの [remote "origin”] の設定が削除される。

$ git remote rm origin

$ cat .git/config
[core]
     repositoryformatversion = 0
     filemode = true
     bare = false
     logallrefupdates = true

[remote "origin"] の設定を削除後にgit remote add origin 〜を実行すると、その設定が.git/configファイルに追記される。

$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git

$ cat .git/config
[core]
     repositoryformatversion = 0
     filemode = true
     bare = false
     logallrefupdates = true
[remote "origin"]
     url = git@github.com:ユーザ名/リポジトリ名.git
     fetch = +refs/heads/*:refs/remotes/origin/*

.git/configファイルにremote名(origin)やリモートレポジトリのURLが指定できていれば、git pushできる。

その他

.git/configファイルにリモートリポジトリを複数登録してある場合(下記の例では"origin"と"heroku")は、下記のように設定される。

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.com:ユーザ名/リポジトリ名.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[remote "heroku"]
    url = git@heroku.com:アプリケーション名.git
    fetch = +refs/heads/*:refs/remotes/heroku/*

リモートリポジトリの一覧を表示する。

$ git remote
heroku
origin

$ git remote -v
heroku  git@heroku.com:アプリケーション名.git (fetch)
heroku  git@heroku.com:アプリケーション名.git (push)
origin  git@github.com:ユーザ名/リポジトリ名.git (fetch)
origin  git@github.com:ユーザ名/リポジトリ名.git (push)