コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

Gitのリモートリポジトリの名前を付け替える 〜Railsのアップグレードに対して〜

git-flowで開発をしていて、master, develop, 各フィーチャーブランチというような状況で、 大きな変更、たとえばRails3.2からRails4系に上げるなどをした場合に 通常のdevelopにマージするより、featureブランチをdevelopにしたほうがよい。

理由はこんな感じ * developで別のエラー修正をしてcommitが先に進んでいるなんてあると、マージ時にデグレード起こす危険性がある * develop進んだ部分のマージはdevelopからフィーチャーブランチに対して、ローカルで丁寧に1ファイルずつ確認するするのが安全

今回はrails3.2のdevelopのプロジェクトを、feature/rails4.2というRails4.2版のFeatureブランチをdevelopにするのを例に上げる(例に上げるというか、最近それやっただけだけど)


前提条件

動作環境

求めるbranchの形

develop rails3.2
feature/rails4.2 develop
master(旧developと同じcommit番号) master(新developと同じcommit番号)

作業一覧

  1. ローカルgitブランチのリネーム
    1. developをrails3.2にする
    2. rails4.2のフィーチャーブランチをdevelopへリネームする
  2. リモートgitブランチのリネーム
    1. 新rails3.2(旧developブランチ)ブランチをリモートブランチに置く
    2. 新develop(旧rails4.2ブランチ)ブランチをリモートブランチに置く
  3. リモートmasterブランチをdevelopと同じにする

ローカルgitブランチのリネーム

developをrails3.2にする

# developをrails3.2へリネームする
> git branch -m develop rails3.2 

# リネームされていることを確認
> git branch | grep rails3.2
rails3.2

rails4.2のフィーチャーブランチをdevelopへリネームする

> git branch -m feature/rails4.2 develop

# リネームされていることを確認
> git branch | grep develop
develop

リモートgitブランチのリネーム

ローカルのgitブランチ内ではリネームは完了しているが リモートgitブランチはまだ以下の様な状態である

  • remote側には、rails3.2ブランチがまだなく、
  • developには古いRails3.2版のブランチがいることになる

新rails3.2(旧developブランチ)ブランチをリモートブランチに置く

> git push origin rails3.2 

> git branch -r | grep rails3.2

新develop(旧rails4.2ブランチ)ブランチをリモートブランチに置く

# -f オプションを付けて強制的にpushしないと、別ブランチなので怒られる
git push origin develop -f

> git branch -r | grep develop

# リネーム前のfeature/rails4.2リモートブランチを削除する
git push --delete origin feature/rails4.2

リモートmasterブランチをdevelopと同じにする

git masterのブランチも

ローカルのmaterブランチを削除するして、developからmasterブランチを作る

> git branch -d master
# developブランチをに移動して 
> git checkout develop
# master ブランチを再度構築する
> git branch master

masterブランチを、リモートのmasterブランチにpushする

# masterブランチへ移動
> git checkout master
# ローカルのmaterブランチを、リモート監視させるつつpushするが、既存のmasterブランチがあるため-f オプションを付ける
> git push -u origin master -f

参考文献

ref:リモート操作 ref:[Git] ローカルとリモートのブランチ名を変更する