Git でローカルブランチ、リモートブランチの名前を変更(リネーム)する方法

2022-10-16Bash,Git,GitHub

はじめに

今更のエントリではありますが、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 コマンドで実現可能です。

  1. 新しいブランチを作成する
  2. 古いブランチを削除する

現在のブランチをリネームする

# 現在のブランチを確認
$ 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 :間違ったブランチ名 正しいブランチ名 というコマンドで代用可能です。

この場合、 リモートブランチ「間違ったブランチ名」 が削除され、同時に ローカルブランチ「正しいブランチ名」 でリモートブランチが新設されます。

手順はこちらのほうが少ないです。

おまけ : 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 のようにすれば、カレントブランチ以外もリネームできます。

ひとこと

これでまた、自分のサイトを検索する機会が増えそうです。

多分僕が「ゲンゾウ用ポストイット」の一番のヘビーユーザーです

2022-10-16Bash,Git,GitHub