Gitのブランチ名を大文字と小文字で2つ作ってしまった場合の対処
目的
Gitのブランチ名大文字のものと小文字のもので2つ作ってしまった場合の対処法がわかる
環境
OS:Windows
大文字と小文字のブランチはローカルでは作れない
そもそも、ローカルでは、大文字と小文字の違いしかないブランチを作成できません。
ためしに、masterブランチがある状態で、Masterブランチを作成してみようとすると
git branch Master
fatal: A branch named 'Master' already exists.
はじかれますね。
core.ignorecase
をfalseにしたとしても、大文字と小文字の差異しかないブランチは作成できません。
というのも、ブランチを作成すると、以下のようにファイルができるのですが、Windows環境の場合、大文字と小文字が区別できないため、作成できるはずがないんですね。
Macはわかりませんが...
同名ブランチができてしまうのはどんなケース?
リモートブランチでGitHubにプッシュする際は、大文字と小文字で分けてブランチが作成されるので、以下を実施すれば、作成できてしまう
方法1
- feautre/Abcブランチを作成し、リモートブランチにプッシュ。
- その後ローカルブランチを削除。
- feature/abcブランチを作成し、リモートボランチにプッシュ。
方法2
- feautre/Abcブランチを作成し、リモートブランチにプッシュ。
- ほかのアカウントでfeature/abcブランチを作成し、リモートボランチにプッシュ。
- 別のアカウントで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するなりお好きにどうぞ