Gitでローカルブランチを作り直したい時の解決方法

ローカルブランチ(自分の作業用のブランチ)を作り直したいときの解決方法をご紹介します。 例えば、親にするブランチを間違えてしまった時や名前を変えたい時など、新しいブランチで作業したいぞという時に使える手順です。

もし、作業を進めてしまっていて作業内容は消したくないという場合は、こちらの記事をご参照ください。
Gitでブランチの派生元を間違えたときの解決方法(rebase –onto、cherry-pick)

ローカルブランチを作り直す方法

手順をざっくり言うと『ブランチを移動→削除→作成』です。
今回は、親ブランチを変えて、もう一度同じブランチ名を使い新しいブランチを作るという想定です。
使いたいブランチ名をwork/A、別のブランチをwork/B、間違えた親ブランチをdevelop、正しい親ブランチをmasterとします。

# この状態からスタートです
$ git checkout -b work/A origin/develop
# 削除したいブランチを開いているなら別のブランチへ移動します
$ git checkout work/B
# 削除
$ git branch -D work/A
# 新しくブランチを作る
$ git checkout -b work/A origin/master

では、細かく解説します。

別のブランチへ移動

# 削除したいブランチを開いているなら別のブランチへ移動します
$ git checkout work/B

次の「削除」のために必要な手順です。消したいブランチに自分がいるままだと削除できません。どこでもいいので別のブランチに移動する必要があります。 もし、そのまま削除をしようとすると下のようなエラーになります。

# 消したいブランチを開いたまま削除する
$ git branch -D work/A
error: Cannot delete branch 'work/A' checked out at 'ローカルリポジトリの場所'

「ローカルリポジトリを確認しましたけど、この名前のブランチは削除できませんよ」と言われます。
もしエラーが上がっても、移動すれば大丈夫です。

不用なブランチを削除

# 削除
$ git branch -D work/A

同じブランチ名を使いたい時に必要な手順です。 Gitではローカルの中で2つと同じ命名はできず、もし削除せずに作ろうとすれば下のようなエラーになります。

# 削除せずに同じ名前の新しいブランチを作成
$ git checkout -b work/A origin/master
error: A branch named 'work/A' already exists.

「その名前のブランチもうあるよ(だから作れませんよ)」と言われます。
もしこんなエラーが上がったら古いブランチを削除すれば大丈夫です。

削除のコマンドは-D強制削除となります。
強制削除のコマンドは--delete --force、もっと短縮した-dfもあります。-Dまでの進化過程が分かったような気がしますね。

同じDでも、小文字にすると違うコマンドになってしまうのでお気を付けください。
-dマージ済みのブランチを削除する時に使用します。同義で--deleteもあります。

同じブランチ名を使いたいなら削除が必要と前述しましたが、もし同じ命名をする必要はなく違う名前でブランチを作り直すなら、移動と削除はすっ飛ばして早速ブランチ新規作成でOKです。
ただ、一度作ったブランチは残るので、整理整頓したい人はどこかのタイミングで削除するといいですね。 コマンドを使って削除する以外に、SourcetreeやTortoiseGitなどのツールを使って削除することもできます。一覧で確認しながら消せるので、所在が明らかで分かりやすいですよ。興味のある方はこちらを読んでみてください。
TortoiseGitで、ブランチを削除する
リモートブランチ(皆が使うブランチ)に影響はないので、ブランチを削除するか残しておくかこの辺りは個人の自由です。

新しくブランチを作る

# 新しくブランチを作る
$ git checkout -b work/A origin/master

削除ができたら元の状態に戻ったので、新しくブランチを作り直します。
コマンドはcheckout -b
これでブランチを作り直し完了です!

ブランチ名だけ変えたい場合

ちなみに、もしブランチ名を変えたいだけならこれだけで済みます。
古いブランチ名をwork/C、新しいブランチ名をwork/Dとします。

# ブランチ名を変更
$ git branch -m work/C work/D

すごくシンプルにできますね。同義で--moveがあります。
このブランチ名だけ変える方法、こちらの記事でももう少し詳しく紹介してます。 他にもpushやmergeのエラー時の対処方法を紹介していて、勉強初めの人にオススメの記事です。
Git初心者がGitに挑む

以上、ブランチの作り直しの方法でした。