テクノロジー · 実用ガイド

Gitの「remote origin already exists」:変更前に既存URLを読む

このerrorが証明するのはlocal名originが設定済みということだけです。fetch、push、trackingの役割を確認してから選択します。

オリジナル概念図:既存の origin を、維持、URL 変更、名前変更、新規 remote 追加の意図に整理する。
オリジナル概念図:現状を確認してから remote 操作を一つ選ぶ。 Watch at Ease

local名の衝突だけで.gitを削除したりforce-pushしません。すべてのURLとoriginの意図を先に記録します。

repositoryと全URLを記録する

root、current branch、git remote -v、originの全fetch URLと全push URLを記録します。複数URLを見落とさないようget-url --allとpush形式を使います。

originの役割を一文にする

現在の協力remoteを維持、新しい宛先へ移行、旧remoteをupstreamとして保存、別の公開remoteを追加、のどれかを選びます。errorは選択しません。

一つの変更を選ぶ

URLが正しければ維持、同じ役割の移動はset-url、旧役割が必要ならrename、fetchと公開が別なら新remoteです。一つのremoteのfetch/push先は同じ場所を指すべきです。

trackingと履歴を守る

remote削除はlocal設定のlink解除だけです。.git削除はlocal履歴と設定を失います。force-pushはref更新であり名前衝突の修復ではありません。

network書込み前に検証する

変更後に全URLとbranch trackingを再確認し、想定名へread-only fetchまたはls-remoteを実行します。認証やrepository-not-foundは別問題です。

元のworkflowを試す

元のtutorial、push、deployを再実行し、意図したrepositoryへrefが届くことを確認します。rollback用に旧URLを記録します。

オリジナル概念図:fetch URL、push URL、ブランチ追跡の証拠を分けて確認する。
オリジナル概念図:編集後に各 remote の役割を検証する。 Watch at Ease