Gitでローカル・リモート一緒にブランチ名を変更したい

Git 2.11.1で確認。

シチュエーション

hageってブランチ作って、

$ git checkout -b hage

諸々修正して、

$ git commit -a
$ git push -u origin hage

commit・pushした後に、

「あれ、ブランチ名間違えた。hogeだった」

ということで、ローカルとリモート併せて名前変えたい。

失敗例

upstreamブランチをリモートから削除して

$ git push --delete origin hage

ローカルブランチの名前を変えて

$ git checkout hage
$ git branch -m hoge

そのまま再push!

$ git push -u origin hoge
...
 * [new branch]      hoge -> hage
                             ~~~~

あれー?

$ git push --delete origin hage
$ git branch -vv
...
hoge ff0da9d [origin/hage: gone] ....
...

リモートのブランチが消えても、一度設定されたupstreamの向き先は残ってるっぽい。

解決

upstreamブランチを削除してローカルブランチ名変えた後、明示的にupstream設定を削除する必要があるようです。

$ git branch --unset-upstream

その後、再push

$ git push -u origin hoge
...
 * [new branch]      hoge -> hoge
                             ~~~~

めでたしめでたし。