Edited at

git: 間違えて作成したリモートリポジトリを引越ししたい

More than 1 year has passed since last update.


やりたいこと

git初心者です。

あるプロジェクトにおいて新規機能を追加するため、既存のリモートリポジトリに作成中の新規アプリケーションをプッシュしたかったのですが、手違いで新規リポジトリを作ってそちらに紐づけてしまいました。

ここからなんとか元のリモートリポジトリに紐付け直そうとして、色々とハマったので恥ずかしながら備忘録メモ。

以下ではアプリケーション名をhogehoge

当初プッシュを予定していたリポジトリをhttps://github.com/foo/yotei.git

今回間違って作成したリポジトリをhttps://github.com/foo/new.git

としておきます。


解決のためにやったこと

https://github.com/foo/yotei.gitをクローンして、yoteiフォルダにアプリケーションフォルダhogehogeごと移動してコミットし直そうとしたのですが、うまく行きませんでした。

hogehogeフォルダが別のリモートリポジトリに紐づいているため、gitがスルーしてしまっているのかなと予想。

現在の紐付け先を変えるだけなら

$git remote set_url

というコマンドがあるのですが、すでに存在するリモートリポジトリに、自分が追加で作ったアプリケーションを追加でプッシュしたかったため、この方法でできるのか確信が持てず。

色々やっているうちにさらにややこしい事態を引き起こしそうになりやむなく断念。


結論

大げさなやり方になってしまいましたが、これにて一応解決しました。


  1. まず予定していたリモートリポジトリyotei.gitをクローンする(実行済み)

  2. yoteiディレクトリに移動

  3. $ git remote add temp_repository "https://github.com/foo/new.git"

      間違えて作成したリモートリポジトリをremoteに登録



  4. git pull temp_repository master

      上記リポジトリnew.gitを、引越し先のマスターにプル

5. git add .

6. git commit -m 'hogehogeをマージ'


  コミットする

7. $ git remote rm temp_repository

   temp_repositoryを削除

8. $ git push origin master --allow-unrelated-histories

なお8で、普通に$ git push origin masterとやれば念願のプッシュ完了・・のはずですが、ここで落とし穴。唐突な追加のせいかfatal: refusing to merge unrelated historiesと怒られる。オプションをつけないとプッシュができないようです。


今後に向けて

今回のケースだと、3-4が余計に感じる・・というか、完全に余計ですね・・(笑)

わざわざローカルリポジトリで作ったアプリケーションを再びリモートから取り寄せています。

mergeとか何か別のコマンドを使えば良いのかなあ、とも思いましたが確信がもてず。スマートなやり方がないのか検討したいです。ご存知でしたら教えていただければ幸いです。

git勉強したいと思います。


参考にしたもの

ながらく路頭に迷っていた中、ここの方のエントリーが非常に参考になりました。

(ほとんど丸まま使わせていただきました。)

http://qiita.com/tak74/items/b0d1cc92fd172468fbf3

また、unrelated historiesがどういうことか、については、stackoverflowに概念図付きの解説コメントがありました。

http://stackoverflow.com/questions/39761024/refusing-to-merge-unrelated-histories-failure-while-pulling-to-recovered-repos

ありがとうございました。