gitのブランチ名を入れ替えたい
たとえば、ちょっと大きな修正を行っているfeatureブランチが存在するとする。
デザインリニューアルとかそんな感じの。
ブランチ一覧
- new_design
- staging
- develop
- master
new_designでは現行バージョンから廃止される機能などもあるので、基本的にdevelopからコードを取得してマージしていない。
現行でも新デザインでも必要なbug_fixはそれぞれ適宜に取り込んでいる。
そんなこんなで、晴れて、新デザインをリリースすることになった。
基本的に違うバージョンなのでnew_designをdevelopにマージすることは できない。
ということはnew_designから新たにmasterを作ってデプロイというような流れになると思う。
今後はnew_designで開発を続けて、現状のdevelopブランチは更新されない。
new_designで開発を続けて、master02にマージしてデプロイ?
ブランチ一覧?
- new_design
- master02
- staging02
- staging
- develop
- master
この経緯を知らない新人PGが入ってきて環境を作ってコードを修正してと言われたとする。
(?????
よく分からないけど、とりあえずdevelopからブランチ作って作業すればいいのかな。。。よく分からないけど。。)
たとえnew_designからブランチを作ってと指示されていたとしても、上のようなブランチ一覧を見たPGは混乱してしまうと思う。
こんなとき、どうするか。
そうだ、リネームしよう。
現状にそっていないネーミングの関数
現状にそっていないネーミングのクラス
PGなら分かると思うが、これらはバグの温床である。
現状にそっていないネーミングのブランチ
これも事故の元となるので、面倒がらずにちゃんとリネームしてあげよう。
重大な変更作業なので、作業の前にはバックアップを取ることを忘れずに。
事前準備
まずは作業前にmaster以外の自分のローカルブランチを削除しておく。
develop → develop_old
# ローカルにリネームした新しいブランチを作成 git branch develop_old origin/develop # チェックアウト git checkout develop_old # 新しいブランチとしてリモートにpushし、上流ブランチに設定 git push -u origin develop_old # 古いほうのリモートブランチを削除 git push origin :develop
new_design → develop
# ローカルにリネームした新しいブランチを作成 git branch develop origin/new_design # チェックアウト git checkout develop # 新しいブランチとしてリモートにpushし、上流ブランチに設定 git push -u origin develop # 古いほうのリモートブランチを削除 git push origin :new_design
masterとstagingについても同様の作業をする
ブランチ一覧
- develop_old
- master_old
- staging_old
- staging
- develop
- master
oldではなくバージョン番号にしてもいいと思う。
チームメンバーのローカルでもリネームしてもらう
# ローカルのリモートブランチ情報を最新の状態にフェッチする git fetch -p # 状態を確認 git branch -avv # ローカルのリモートブランチ情報がリモートのブランチ一覧と合致していることを確認 # masterブランチにチェックアウト git checkout master # ローカルの作業ブランチを削除 git branch -d new_design git branch -d develop # ローカルの作業ブランチを新規作成 git branch develop origin/develop git branch develop_old origin/develop_old # 状態を確認 git branch -avv # 上流ブランチにローカルブランチ名と同じ名前のリモートブランチが設定されていることを確認
ブランチ名の入れ替えは、結構思い切った作業だと思うけど、
それはリファクタリングと同じで
何か起こると怖いから汚いコードを放置しているのと同じ。
放置された汚いコードの上から、さらにコードを付け加えたり削除したりを繰り返すと、いつか誰も読めないグチャグチャなものになり、
もっとも恐れていることが起きる。
いろんな経緯があって、たくさんブランチができてる、怖いから全部残している、その気持ち、非常によく分かります。
でも、家の大掃除だと思って、思い切ってgitのブランチ名を適切な状態に整理しましょう!