nanisore oishisou

プログラマ、ララ・ベル子さん改めArm4さんのゆるふわ奮闘記。

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のブランチ名を適切な状態に整理しましょう!