Gitでローカルブランチ、リモートブランチの名前を変更(リネーム)する方法
はじめに
今更のエントリではありますが、Git でブランチ名を変更する方法を毎回忘れてわざわざ以下のステップを実行しているのでいいかげん整理しておこうと思いました。
# 間違ったブランチ ブランチが現在のブランチ
$ git branch
main
* 間違ったブランチ
# 正しいブランチ ブランチを新規作成
$ git checkout -b 正しいブランチ
Switched to a new branch '正しいブランチ'
# 正しいブランチ ブランチが現在のブランチ
$ git branch
main
* 正しいブランチ
間違ったブランチ
# 間違ったブランチ ブランチは不要なため削除
$ git branch -d 間違ったブランチ
Deleted branch 間違ったブランチ (was 3c3b0a1).
# ブランチを確認
$ git branch
main
* 正しいブランチ
この方法でブランチはリネーム出来ますが、面倒であることや git push
しリモートブランチとして反映されてしまった場合に対応でき ません。
検証環境
$ uname -moi
aarch64 aarch64 GNU/Linux
$ head -n 2 /etc/os-release
NAME="Ubuntu"
VERSION="21.04 (Hirsute Hippo)"
$ bash -version | head -n 1
GNU bash, バージョン 5.1.4(1)-release (aarch64-unknown-linux-gnu)
$ git --version
git version 2.30.2
準備
今回の学習のために、シンプルな Git ローカル環境を作成しておきます。
$ git init
Initialized empty Git repository in /workdir/.git/
# 適当なメッセージを追記したテキストファイルを作成
$ echo "frist." >> memo.txt
# テキストファイルをステージング(コミット候補)に追加
$ git add memo.txt
# メッセージ付きでコミット
$ git commit -m "first commit."
[main (root-commit) 7cb2010] first commit.
1 file changed, 2 insertions(+)
create mode 100644 memo.txt
# 現在のブランチを確認(*[アスタリスク]が表示されているのが現在のブランチ)
$ git branch
* main
# 新しいブランチを作成(作成時に間違った名前をつけてしまった!!)
$ git checkout -b 間違ったブランチ名
Switched to a new branch '間違ったブランチ名'
# 現在のブランチを確認(*[アスタリスク]が表示されているのが現在のブランチ)
$ git branch
main
* 間違ったブランチ名
一部、表示されるブランチ名が環境によって main
だったり master
だったりと違いがあります。
お使いの環境に合わせて読み替えてください。
1. ローカルブランチの名前を変更 ( リネーム ) する方法
ローカルブランチの名前を変更する方法です。
冒頭で紹介した方法は以下のような手順を踏みましたが、名前の変更方法を知っていれば 1 コマンドで実現可能です。
- 新しいブランチを作成する
- 古いブランチを削除する
現在のブランチをリネームする
# 現在のブランチを確認
$ git branch
main
* 間違ったブランチ名
$ git branch -m 正しいブランチ名
$ git branch
main
* 正しいブランチ名
git branch
でアスタリスク *
が表示されるブランチ名が正しいブランチ名になっていることがわかります。
ポイントは -m
オプションです。
現在のブランチ以外をリネームする
現在のブランチ以外をリネームしたい場合があります。
例えば以下のように、 main
ブランチにいる場合です。
# 現在のブランチを確認
$ git branch
* main
間違ったブランチ名
$ git branch -m 間違ったブランチ名 正しいブランチ名
$ git branch
* main
正しいブランチ名
現在のブランチは main
のままで、他のブランチをリネームできました。
2. リモートブランチの名前を変更 ( リネーム ) する方法
ローカルブランチではなく、リモートブランチ名を変更したい場合は少し面倒です。
まずは先の 「1. ローカルブランチの名前を変更 ( リネーム ) する方法」 のとおりにローカルブランチ名を変更します。
# 現在のブランチを確認
$ git branch
main
* 間違ったブランチ名
$ git branch -m 正しいブランチ名
# -a オプション付きでブランチを確認
# ローカルブランチ名は修正されているがリモートブランチ名は修正されていない
$ git branch -a
main
* 正しいブランチ名
remotes/origin/main
remotes/origin/間違ったブランチ名
次に 古いリモートブランチを削除 します。
$ git push origin --delete 間違ったブランチ名
To https://github.com/genzouw/learning-git.git
- [deleted] 間違ったブランチ名
$ git branch -a
main
* 正しいブランチ名
remotes/origin/main
--delete
オプションを使用せず git push orignin :間違ったブランチ名
でも同じ結果が得られます。
最後に 正しいローカルブランチ名をプッシュし、リモートブランチを作成 します。
$ git push origin -u 正しいブランチ名
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for '正しいブランチ名' on GitHub by visiting:
remote: https://github.com/genzouw/learning-git/pull/new/%E6%AD%A3%E3%81%97%E3%81%84%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E5%90%8D
remote:
To https://github.com/genzouw/learning-git.git
* [new branch] 正しいブランチ名 -> 正しいブランチ名
branch '正しいブランチ名' set up to track 'origin/正しいブランチ名'.
$ git branch -a
main
* 正しいブランチ名
remotes/origin/main
ちなみに 「リモートブランチの削除 + リモートブランチの作成」 は、 git push origin :間違ったブランチ名 正しいブランチ名
というコマンドで代用可能です。
この場合、 リモートブランチ「間違ったブランチ名」 が削除され、同時に ローカルブランチ「正しいブランチ名」 でリモートブランチが新設されます。
手順はこちらのほうが少ないです。
おまけ : git rename
コマンドをエイリアスとして登録しておく
git branch -m
を頻繁に利用するケースは多くありませんが、 わかりやすい名前で alias として登録しておくと便利です。
(僕はタイポのせいで多いですが ^^;
)
$ git config --global alias.rename 'branch -m'
以下のように利用します。
$ git branch
main
* 正しいブランチ
# エイリアスを使ってリネーム
$ git rename hoge
# 現在のブランチを確認
$ git branch
* hoge
main
便利に使えます。
git rename 正しいブランチ hoge
のようにすれば、カレントブランチ以外もリネームできます。
ひとこと
これでまた、自分のサイトを検索する機会が増えそうです。
多分僕が「ゲンゾウ用ポストイット」の一番のヘビーユーザーです 。
ディスカッション
コメント一覧
> ちなみに 「リモートブランチの削除 + リモートブランチの作成」 は、 git push :間違ったブランチ名 正しいブランチ名 というコマンドで代用可能です。
originが抜けているのではないでしょうか。
正しくは
git push origin :間違ったブランチ名 正しいブランチ名
かと。
> @for2ando さん
ありがとうございます!
おっしゃるとおり、 `origin` の記載漏れですね。
修正しておきました。