LoginSignup
1
1

More than 5 years have passed since last update.

gitで履歴を保持したままブランチ名を変更する方法

Posted at

masterと別のブランチ (以下ではdevelopとする) が枝分かれしてしまったけど、
developをmasterに置き換えたい時ってあると思います。

例えば、github pagesだとmasterブランチの内容がデプロイされるので、
developブランチなどの開発用ブランチを切っておいて、ビルドしたものをmasterで管理するのが一般的だと思います。でも気が変わって、masterで開発用コードを管理したいと思うかもしれません。 (github pageからnetlifyに移行するときとか)

解決策1: ブランチをリネームする

もとのmasterの履歴が消えてしまってもいいなら、
以下のように、developブランチをmasterに名前変更するのが一番手っ取り早いです。

git branch -m master old-master
git branch -m develop master
git push -f origin master # force pushでコンフリクトを避ける

解決策2: マージ戦略 (ours)を使う

もし、masterの情報を消さずに履歴に残しておきたいのであれば、git merge--strategyオプションでマージ戦略をoursにすればよいです。
この戦略を使うことによって、マージする際にマージ元の履歴は残しつつ、マージの結果は現在のブランチの内容で上書きされた状態になります。

git checkout develop
git merge --strategy ours master
git checkout master
git merge develop

上のコマンドを実行するとコミットログは以下のようになります。
左側のパスがdevelop、右側がmasterのパスとなっているのですが、
実行後のmasterはdevelopがもともと指していたコミット (add netlify CMS setting)と同じになっていることが (diff)で確認できました。

*   d39f112 (HEAD -> master, origin/master) Merge branch 'master' into develop
|\
| * b5d22c9 Updates
| * 81d260f Updates
| * 6b4e277 Updates
* | 4a2b0e8 Add netlify CMS setting
* | 18454da Add article
* | c2a7dc1 Add gh-pages
|/
* 4352875 Add styled-component and change layout
* 62c0b88 Make date atom component
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1