親戚のゲーム作ってるおじさんブログ

「そういえば、そんな人いるとか聞いたなあ」って思ったでしょ? 私です。

Gitのブランチ名を大文字と小文字で2つ作ってしまった場合の対処

目的

Gitのブランチ名大文字のものと小文字のもので2つ作ってしまった場合の対処法がわかる

環境

OS:Windows

リモートリポジトリ:GitHub

大文字と小文字のブランチはローカルでは作れない

そもそも、ローカルでは、大文字と小文字の違いしかないブランチを作成できません。

ためしに、masterブランチがある状態で、Masterブランチを作成してみようとすると

git branch Master
fatal: A branch named 'Master' already exists.

はじかれますね。

core.ignorecase をfalseにしたとしても、大文字と小文字の差異しかないブランチは作成できません。

というのも、ブランチを作成すると、以下のようにファイルができるのですが、Windows環境の場合、大文字と小文字が区別できないため、作成できるはずがないんですね。

Macはわかりませんが...

同名ブランチができてしまうのはどんなケース?

リモートブランチでGitHubにプッシュする際は、大文字と小文字で分けてブランチが作成されるので、以下を実施すれば、作成できてしまう

方法1

  1. feautre/Abcブランチを作成し、リモートブランチにプッシュ。
  2. その後ローカルブランチを削除。
  3. feature/abcブランチを作成し、リモートボランチにプッシュ。

方法2

  1. feautre/Abcブランチを作成し、リモートブランチにプッシュ。
  2. ほかのアカウントでfeature/abcブランチを作成し、リモートボランチにプッシュ。
  3. 別のアカウントでfeature/abcブランチを作成し、リモートボランチにプッシュ。

発生する問題

この状態になってしまうと、feature/Abcをチェックアウトすることはできなくなります。

git checkout feature/abc としても、 git checkout feature/Abcとしても、どちらにしてもfeature/abcがチェックアウトされてしまうのです。

解決策

前提として、コンフィグのcore.ignorecase をfalseにしたとしても、feature/Abcをチェックアウトすることはできません。

ではどうするのかというと、リモートリポジトリのブランチ名を、ローカルリポジトリ側で判別できる別の名前に変更すれば、通常のブランチとして捜査できるようになります。

対処手順

GibHubのリポジトリページから、「View all branches」をクリック

リネームしたいブランチの編集(ペンのマーク)をクリック

Rename欄にあたらしいブランチ名を入力し、「Rename branch」ボタンを押す。

git fetchしてから、リネーム後のブランチ名でチェックアウト

git fetch
git checkout feature/abc_2

これで、feture/Abcにあった変更は、fetaure/abc_2でアクセスできるようになりました。

あとは、feature/abcにマージするなり、一部cherry-pickするなりお好きにどうぞ

参考

ブランチの名前を変更する - GitHub Docs