- Git
gitブランチの削除と名前変更|-d・-D・-mとリモートブランチ削除
git のブランチは、ローカルなら git branch -d(削除)と git branch -m(名前変更)、リモートなら git push origin --delete で操作します。 ただし「ブランチ」と呼ばれるものは、手元のローカルブランチ、サーバー上のリモートブランチ、その写しであるリモート追跡ブランチの3種類があり、それぞれ消すコマンドが違います。ここを押さえると、削除したはずのブランチが一覧に残る、といった戸惑いがなくなります。
この記事では、削除と名前変更を1本にまとめ、3種類のブランチごとのコマンド早見表を用意しました。「not fully merged」「チェックアウト中のブランチは削除できない」「remote ref does not exist」は Git 2.43.0 で実際に再現し、原因と対処を並べています。リモートのブランチ名を変える手順、reflog からの復元、マージ済みブランチの一括削除ワンライナーも、そのまま貼って使える形で載せています。
ブランチ削除・名前変更コマンド早見表
| 対象 | やりたいこと | コマンド |
|---|---|---|
| ローカルブランチ | 削除(マージ済みのみ) | git branch -d <ブランチ名> |
| ローカルブランチ | 削除(マージしていなくても消す) | git branch -D <ブランチ名> |
| ローカルブランチ | 名前変更 | git branch -m <旧名> <新名> |
| ローカルブランチ | いまいるブランチの名前変更 | git branch -m <新名> |
| リモートブランチ | 削除 | git push origin --delete <ブランチ名> |
| リモートブランチ | 削除(短い書き方) | git push origin :<ブランチ名> |
| リモートブランチ | 名前変更 | 新名で push → 旧名を削除(下の手順) |
| リモート追跡ブランチ | リモートで消えた分をまとめて整理 | git fetch -p |
| リモート追跡ブランチ | 整理される対象を事前に確認 | git remote prune origin --dry-run |
| リモート追跡ブランチ | 1つだけ削除 | git branch -dr origin/<ブランチ名> |
| 復元 | 削除したローカルブランチを戻す | git branch <ブランチ名> <コミットID> |
| 一括削除 | マージ済みのローカルブランチをまとめて消す | git branch --merged | grep -vE '^\*|^\+| (main|master|develop)$' | xargs -r git branch -d |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「gitブランチの削除と名前変更|-d・-D・-mとリモートブランチ削除」
3種類のブランチを区別する
「ブランチを消したのに git branch -a に残っている」という場面の多くは、3種類のうち1つだけを消している状態です。
| 種類 | どこにあるか | 一覧コマンド | 表示例 |
|---|---|---|---|
| ローカルブランチ | 自分のPCのリポジトリ | git branch |
feature/login |
| リモートブランチ | サーバー(origin)のリポジトリ | git ls-remote --heads origin |
refs/heads/feature/login |
| リモート追跡ブランチ | 自分のPC。最後に fetch した時点のリモートの写し | git branch -r |
origin/feature/login |
flowchart LR
subgraph PC["自分のPC"]
L["ローカルブランチ<br>feature/login"]
T["リモート追跡ブランチ<br>origin/feature/login"]
end
subgraph SV["サーバー (origin)"]
R["リモートブランチ<br>feature/login"]
end
L -- "git push" --> R
R -- "git fetch" --> T
L -. "git branch -d" .-> X1["削除"]
R -. "git push origin --delete" .-> X2["削除"]
T -. "git fetch -p" .-> X3["整理"]
リモート追跡ブランチは「写し」なので、サーバーで誰かがブランチを消しても、自分が fetch するまで手元に残り続けます。 これが、あとで出てくる「remote ref does not exist」の主な原因です。
検証に使ったリポジトリ
この記事の実行結果は、次の手順で作ったリポジトリで取りました(Git 2.43.0)。main に feature/login と fix/typo をマージ済み、feature/search・topic/old-name・wip/idea は未マージです。
git init -q --bare remote.git
git clone -q remote.git work && cd work
echo a > a.txt && git add . && git commit -qm init && git push -q -u origin main
mk() { git switch -qc "$1"; echo "$1" > "${1//\//-}.txt"; git add .; git commit -qm "add $1"; git switch -q main; }
mk feature/login; mk feature/search; mk fix/typo; mk topic/old-name; mk wip/idea
git merge -q --no-edit feature/login
git merge -q --no-edit fix/typo
git push -q origin main feature/login feature/search fix/typo topic/old-name
git branch -a
feature/login
feature/search
fix/typo
* main
topic/old-name
wip/idea
remotes/origin/feature/login
remotes/origin/feature/search
remotes/origin/fix/typo
remotes/origin/main
remotes/origin/topic/old-name
* が付いているのが、いまいるブランチです。
ローカルブランチを削除する(-d と -D)
git branch -d はマージ済みのブランチを削除する
git branch -d fix/typo
Deleted branch fix/typo (was 2373587).
(was 2373587) は、削除したブランチが指していたコミットIDです。あとで復元したくなったときの手がかりになるので、メッセージごと残しておくと役立ちます。
削除してよいか先に確かめる
-d で消せるのは、いまいるブランチ(または追跡先)に取り込み済みのブランチです。--merged と --no-merged で事前に確認できます。
git branch --merged
feature/login
fix/typo
* main
git branch --no-merged
feature/search
topic/old-name
wip/idea
エラー再現1:not fully merged
マージしていないブランチを -d で消そうとすると、Git が止めてくれます。
git branch -d feature/search
error: the branch 'feature/search' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature/search'
| 項目 | 内容 |
|---|---|
| 意味 | このブランチにしかないコミットがあり、削除するとどのブランチからもたどれなくなる |
| Git の意図 | 作業内容をうっかり手放さないための確認 |
| 対処1(残したい) | git switch main → git merge feature/search で取り込んでから -d |
| 対処2(不要と確認できた) | git branch -D feature/search |
| 確認方法 | git log main..feature/search --oneline で、そのブランチにしかないコミットを見る |
スカッシュマージや rebase でマージした場合は、内容が取り込まれていてもコミットIDが別物になるため、同じメッセージが出ます。プルリクエストがマージ済みであることを画面で確かめたうえで -D を使います。
git branch -D は確認なしで削除する
git branch -D wip/idea
Deleted branch wip/idea (was 805e135).
-D は --delete --force の短縮形です。-d との違いを表にまとめます。
| 項目 | git branch -d |
git branch -D |
|---|---|---|
| 正式な書き方 | --delete |
--delete --force |
| マージ済みのブランチ | 削除できる | 削除できる |
| 未マージのブランチ | エラーで止まる | 削除する |
| 向いている場面 | 普段の片付け | 試し書きのブランチ、スカッシュマージ後 |
| 削除後の復元 | reflog から可能 | reflog から可能 |
普段は -d を使い、Git が止めたときだけ中身を確認して -D に切り替える、という順番にしておくと落ち着いて片付けられます。
エラー再現2:チェックアウト中のブランチは削除できない
いまいるブランチは削除できません。-D を付けても同じです。
git branch -d main
error: cannot delete branch 'main' used by worktree at '/path/to/work'
(パスは短く書き換えています。)Git 2.43.0 ではこの文面でした。以前の版では「Cannot delete branch 'main' checked out at ...」という文面で表示されることが知られています(こちらは今回未実行です)。どちらも原因は同じで、別のブランチへ移動してから削除します。
git switch main
git branch -d feature/login
git worktree で別のフォルダにチェックアウトしているブランチも、同じメッセージで止まります。
git worktree add -q ../wt feature/search
git branch -D feature/search
error: cannot delete branch 'feature/search' used by worktree at '/path/to/wt'
この場合は git worktree remove ../wt で作業ツリーを外してから削除します。メッセージの at 以降に、どのフォルダで使われているかが書かれています。
存在しないブランチ名を指定したとき
git branch -d nothing
error: branch 'nothing' not found
つづりを git branch で確かめます。リモート追跡ブランチ(origin/...)を消したい場合は、後述の -dr を使います。
リモートブランチを削除する
git push origin --delete で削除する
git push origin --delete fix/typo
To ../remote.git
- [deleted] fix/typo
指定するのは origin/ を付けないブランチ名です。同時に、手元のリモート追跡ブランチ origin/fix/typo も削除されます。
コロンを使う短い書き方
git push origin :feature/login
To ../remote.git
- [deleted] feature/login
git push origin <ローカル>:<リモート> という書式の「ローカル側を空にして push する」という意味で、結果は --delete と同じです。読みやすさを優先するなら --delete がおすすめです。
エラー再現3:remote ref does not exist
すでにサーバーから消えているブランチを削除しようとすると、次のエラーになります。
git push origin --delete fix/typo
error: unable to delete 'fix/typo': remote ref does not exist
error: failed to push some refs to '../remote.git'
主な原因は3つあります。
| 原因 | 確認方法 | 対処 |
|---|---|---|
| 別の人(またはマージ時の自動削除)がすでに消した | git ls-remote --heads origin |
git fetch -p で手元の写しを整理 |
origin/ を付けて指定した |
コマンドを見直す | origin/ を外す |
| ブランチ名のつづり違い | git branch -r |
正しい名前で打ち直す |
1つ目を再現します。別のクローンから feature/search を削除したあと、手元ではまだ一覧に残っています。
git branch -r
origin/feature/search
origin/main
origin/topic/old-name
git push origin --delete feature/search
error: unable to delete 'feature/search': remote ref does not exist
error: failed to push some refs to '../remote.git'
一覧に見えているのは手元の写し(リモート追跡ブランチ)で、サーバー側はすでに削除済みという状態です。次の節の git fetch -p で解消します。
2つ目の origin/ を付けた場合も、同じエラーになりました。
git push origin --delete origin/feature/login
error: unable to delete 'origin/feature/login': remote ref does not exist
error: failed to push some refs to '../remote.git'
デフォルトブランチは削除を断られる
サーバー側で HEAD が指しているブランチ(多くは main)を消そうとすると、リモートが拒否します。今回のベアリポジトリでは次の表示でした。
remote: error: refusing to delete the current branch: refs/heads/main
To ../remote.git
! [remote rejected] main (deletion of the current branch prohibited)
error: failed to push some refs to '../remote.git'
ホスティングサービスでは、デフォルトブランチや保護されたブランチの削除が設定で制限されていることがあります(各サービスの画面での操作は今回未実行です)。デフォルトブランチを変えたい場合は、先にサービス側の設定で切り替えてから旧ブランチを削除します。
リモート追跡ブランチを整理する(git fetch -p)
消える対象を先に確認する
git remote prune origin --dry-run
Pruning origin
URL: ../remote.git
* [would prune] origin/feature/search
git fetch -p で整理する
-p(--prune)を付けて fetch すると、サーバーから消えたブランチの写しを手元からも削除します。
git fetch -p
From ../remote
- [deleted] (none) -> origin/feature/search
git branch -r
origin/main
origin/topic/old-name
git fetch -p が消すのはリモート追跡ブランチだけで、ローカルブランチ(feature/search)は残ります。ローカル側は git branch -d で別に削除します。
毎回 -p を付けなくて済む設定
git config --global fetch.prune true
これで git fetch や git pull のたびに整理されます。リポジトリ単位で設定したい場合は --global を外します。
追跡先が消えたローカルブランチは gone と表示される
追跡先を設定していたローカルブランチは、サーバー側が消えると git branch -vv に gone と表示されます。git for-each-ref でも確認できます。
git for-each-ref --format='%(refname:short) %(upstream:track)' refs/heads
feature/search
main [ahead 3]
tmp/c [gone]
topic/new-name
git status では次のように案内されました。
On branch topic/old-name
Your branch is based on 'origin/topic/old-name', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
リモート追跡ブランチを1つだけ削除する
git branch -dr origin/feature/search
Deleted remote-tracking branch origin/feature/search (was 67d3e87).
これは手元の写しを消すだけで、サーバー側には影響しません。サーバーにブランチが残っていれば、次の git fetch でまた作られます。
From ../remote
* [new branch] feature/search -> origin/feature/search
ブランチ名を変更する(-m)
ローカルブランチの名前を変更する
git branch -m topic/old-name topic/new-name
成功時は何も表示されません。git branch で確認します。
topic/new-name f42ca62 add topic/old-name
いまいるブランチの名前を変えるときは、新しい名前だけで足ります。
git switch topic/new-name
git branch -m topic/renamed
git status -sb
## topic/renamed
名前変更のオプション一覧
| コマンド | 動き |
|---|---|
git branch -m <新名> |
いまいるブランチの名前を変える |
git branch -m <旧名> <新名> |
指定したブランチの名前を変える |
git branch -M <旧名> <新名> |
新名がすでにあっても上書きして変える(--move --force) |
git branch -c <元> <新名> |
ブランチをコピーする(設定と reflog も引き継ぐ) |
名前変更で出るエラー
すでにある名前へ変えようとした場合です。
git branch -m topic/new-name feature/search
fatal: a branch named 'feature/search' already exists
別の名前にするか、上書きしてよいと確認できた場合だけ -M を使います。-M は既存のブランチを置き換えるので、先に git log <既存のブランチ> で中身を見ておくと確実です。
空白を含む名前は使えません。
git branch -m topic/copy 'bad name'
fatal: 'bad name' is not a valid branch name
topic/new-name があるときに topic という名前へ変えることもできません。ブランチ名の / はフォルダと同じ扱いになるためです。
error: 'refs/heads/topic/new-name' exists; cannot create 'refs/heads/topic'
fatal: branch rename failed
| エラー文 | 原因 | 対処 |
|---|---|---|
a branch named '...' already exists |
新名のブランチがすでにある | 別名にする/確認のうえ -M |
'...' is not a valid branch name |
空白など使えない文字がある | ハイフンやスラッシュで区切る |
'refs/heads/a/b' exists; cannot create 'refs/heads/a' |
a/b があると a は作れない |
階層がぶつからない名前にする |
大文字と小文字だけを変える場合(topic/new-name を Topic/New-Name に)は、Linux 上では -m でそのまま変更できました。大文字小文字を区別しないファイルシステムでは挙動が変わることがあります(今回は Linux のみで確認)。
リモートのブランチ名を変更する手順
Git には「リモートブランチの名前を直接変える」コマンドがありません。新しい名前で push し、旧名を削除し、追跡先を付け直す、という3ステップで行います。
コピペ用:リモートブランチ名変更の一式
# 0. 最新の状態にしておく
git fetch -p
# 1. ローカルの名前を変える
git branch -m topic/old-name topic/new-name
# 2. 新しい名前で push し、追跡先(upstream)も新しい名前に設定する
git push origin -u topic/new-name
# 3. リモートの旧名を削除する
git push origin --delete topic/old-name
# 4. 結果を確認する
git branch -vv
git branch -r
実行結果
手順2の出力です。
To ../remote.git
* [new branch] topic/new-name -> topic/new-name
branch 'topic/new-name' set up to track 'origin/topic/new-name'.
手順3の出力です。
To ../remote.git
- [deleted] topic/old-name
手順4で、追跡先が新しい名前になっていることを確認できます。
* topic/new-name f42ca62 [origin/topic/new-name] add topic/old-name
origin/feature/search
origin/main
origin/topic/new-name
手順2で -u を付ける理由
今回の検証では、ローカルの名前を変えた直後に -u なしで git push を実行すると、次のメッセージで止まりました(このブランチは追跡先が未設定の状態でした)。
fatal: The current branch topic/new-name has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin topic/new-name
追跡先が設定済みのブランチを -m で改名した場合は、追跡先が旧名のまま引き継がれます。up/old を push 済みの状態で git branch -m up/new を実行した結果です。
* up/new 24a2847 [origin/up/old] Merge branch 'tmp/b'
この状態で git push を打つと、名前の不一致を知らせるメッセージで止まりました。
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:up/old
どちらの場合も、git push origin -u <新名> を打てば追跡先が新しい名前にそろいます。
* up/new 24a2847 [origin/up/new] Merge branch 'tmp/b'
あとから付け直すなら次のコマンドです。
git branch -u origin/topic/new-name topic/new-name
branch 'topic/new-name' set up to track 'origin/topic/new-name'.
同じブランチを使っていた人の作業
名前を変えたことをチームに伝え、各自の手元で次を実行してもらいます。
git fetch -p
git branch -m topic/old-name topic/new-name
git branch -u origin/topic/new-name topic/new-name
git status
別のクローンで実行した結果です。
From /path/to/remote
- [deleted] (none) -> origin/topic/old-name
* [new branch] topic/new-name -> origin/topic/new-name
branch 'topic/new-name' set up to track 'origin/topic/new-name'.
On branch topic/new-name
Your branch is up to date with 'origin/topic/new-name'.
名前変更の前に確認すること
| 確認すること | 理由 |
|---|---|
| そのブランチでプルリクエストを開いていないか | 旧名を削除すると、サービスによってはプルリクエストが閉じられる |
| CI やデプロイの設定にブランチ名が書かれていないか | 設定ファイルの名前も合わせて直す |
| ほかの人がそのブランチで作業していないか | 上の4コマンドを共有する |
| デフォルトブランチではないか | サービス側の設定で切り替えてから行う |
master から main のようにデフォルトブランチの名前を変える場合も流れは同じですが、手順3の前にホスティングサービスの設定でデフォルトブランチを新しい名前へ切り替える必要があります。切り替えたあとは、各自の手元で git remote set-head origin -a を実行すると origin/HEAD が更新されます。
origin/HEAD set to main
削除したブランチを復元する
ブランチを削除しても、コミットそのものはすぐには消えません。ブランチは「コミットを指す名札」なので、同じコミットに名札を付け直せば元に戻ります。
削除時のメッセージからコミットIDを拾う
git branch -D feature/search
Deleted branch feature/search (was 67d3e87).
git branch feature/search 67d3e87
git log --oneline -2 feature/search
67d3e87 add feature/search
85a13bc init
メッセージが流れてしまったら reflog で探す
git reflog には、HEAD が移動した履歴が残っています。ブランチ名やコミットメッセージで絞り込みます。
git reflog | grep 'search'
85a13bc HEAD@{17}: checkout: moving from feature/search to main
67d3e87 HEAD@{18}: commit: add feature/search
85a13bc HEAD@{19}: checkout: moving from main to feature/search
commit: add feature/search の行にある 67d3e87 が、そのブランチの最後のコミットです。
git branch feature/search 67d3e87
復元と同時にそのブランチへ移動したいなら、git switch -c を使います。
git switch -c feature/search2 67d3e87
Switched to a new branch 'feature/search2'
復元できる場合・難しい場合
| 状況 | 復元の見込み | 方法 |
|---|---|---|
| ローカルで削除した直後 | 高い | 削除メッセージの ID か reflog から git branch |
| リモートだけ削除し、ローカルが残っている | 高い | git push origin <ブランチ名> で再度 push |
| リモートもローカルも削除したが、自分のPCで作業していた | 高い | reflog から復元して push |
| 自分のPCに一度もチェックアウトしていないブランチ | 低い | そのブランチを持っている人に push してもらう |
| 削除から長い期間が経った | 下がる | reflog の保持期間(既定で90日)を過ぎると整理の対象になる |
reflog は自分のPCの操作履歴なので、ほかの人のPCで行われた操作は含まれません。
マージ済みブランチを一括削除する
ローカルのマージ済みブランチをまとめて削除
まず、対象になるブランチを一覧で確認します。
git switch main
git branch --merged | grep -vE '^\*|^\+| (main|master|develop)$'
feature/login
tmp/a
tmp/b
問題なければ、末尾に xargs を足して削除します。
git branch --merged | grep -vE '^\*|^\+| (main|master|develop)$' | xargs -r git branch -d
Deleted branch feature/login (was d98503b).
Deleted branch tmp/a (was 12f64aa).
Deleted branch tmp/b (was 4455f65).
| 部分 | 役割 |
|---|---|
git branch --merged |
いまいるブランチにマージ済みのブランチを一覧 |
grep -vE '^\*|^\+| (main|master|develop)$' |
いまいるブランチ(行頭が *)、worktree で使用中(行頭が +)、残したいブランチを除外 |
xargs -r git branch -d |
残った名前を git branch -d に渡す。-r は対象が空なら何もしない指定 |
-d を使っているので、未マージのブランチが混ざっても Git が止めてくれます。残したいブランチ名はかっこの中に | 区切りで足してください。
リモートで消えたブランチ(gone)のローカル側をまとめて削除
プルリクエストのマージ時にサーバー側のブランチが自動で消える運用では、手元に gone のブランチがたまっていきます。
git fetch -p
git for-each-ref --format='%(refname:short) %(upstream:track)' refs/heads \
| awk '$2=="[gone]"{print $1}' \
| xargs -r git branch -D
Deleted branch tmp/c (was 304e15e).
スカッシュマージ後のブランチは -d では止まるため、ここでは -D を使っています。実行前に、xargs より前の部分だけを流して対象を確認しておくと安心です。
名前のパターンでまとめて削除
git branch --list 'tmp/*'
tmp/x
tmp/y
git branch -D $(git branch --list 'tmp/*' --format='%(refname:short)')
Deleted branch tmp/x (was 09f50ec).
Deleted branch tmp/y (was d125309).
リモートのマージ済みブランチを確認する
git fetch -p
git branch -r --merged origin/main
リモート側の一括削除は影響が大きいので、一覧をチームで確認してから、1つずつ git push origin --delete で消す進め方がおすすめです。
alias に登録しておく
git config --global alias.cleanup "!git branch --merged | grep -vE '^\\*|^\\+| (main|master|develop)\$' | xargs -r git branch -d"
登録後は git cleanup で呼び出せます。マージ済みの up/new がある状態で実行した結果です。
Deleted branch up/new (was 24a2847).
エラーメッセージ別の対処早見表
| エラーメッセージ | 原因 | 対処 |
|---|---|---|
error: the branch '...' is not fully merged. |
未マージのコミットがある | マージしてから -d、または確認のうえ -D |
error: cannot delete branch '...' used by worktree at '...' |
そのブランチをチェックアウト中 | git switch で別ブランチへ移動。worktree なら git worktree remove |
error: branch '...' not found |
名前違い、またはリモート追跡ブランチを指定 | git branch で確認。追跡ブランチは -dr |
fatal: The upstream branch of your current branch does not match the name of your current branch. |
改名後も追跡先が旧名のまま | git push origin -u <新名> |
error: unable to delete '...': remote ref does not exist |
サーバー側にすでにない/origin/ を付けた |
git fetch -p、origin/ を外す |
! [remote rejected] ... (deletion of the current branch prohibited) |
サーバーのデフォルトブランチ | デフォルトブランチを切り替えてから削除 |
fatal: a branch named '...' already exists |
変更後の名前がすでにある | 別名にする、または確認のうえ -M |
fatal: '...' is not a valid branch name |
使えない文字が含まれる | 空白などを除く |
fatal: The current branch ... has no upstream branch. |
追跡先が未設定 | git push -u origin <ブランチ名> |
Your branch is based on '...', but the upstream is gone. |
追跡先がサーバーから消えた | git branch --unset-upstream または -u で付け直す |
削除・名前変更の前のチェックリスト
| 確認すること | コマンド |
|---|---|
| いまいるブランチは削除対象ではないか | git branch(* の位置) |
| マージ済みか | git branch --merged |
| そのブランチにしかないコミットは何か | git log main..<ブランチ名> --oneline |
| push していないコミットが残っていないか | git branch -vv(ahead の表示) |
| リモートの最新状態を反映したか | git fetch -p |
| ブランチ名のつづり | git branch -a |
よくある質問
Q. git branch -d と -D はどちらを使えばよいですか?
A. まず -d を使うのがおすすめです。マージ済みならそのまま削除され、未マージなら Git が「not fully merged」で知らせてくれます。そのうえで不要だと確認できたときだけ -D を使うと、必要なコミットを手放さずに済みます。
Q. リモートブランチを削除したのに、git branch -a に remotes/origin/... が残ります。
A. 残っているのは手元のリモート追跡ブランチです。自分で git push origin --delete を実行した場合は同時に消えますが、ほかの人やマージ時の自動削除で消えた場合は、git fetch -p を実行するまで残ります。git config --global fetch.prune true を設定しておくと、fetch のたびに整理されます。
Q. ローカルブランチを削除すると、リモートブランチも消えますか?
A. 消えません。ローカル、リモート、リモート追跡ブランチはそれぞれ別のものです。両方を片付けたいときは git branch -d <ブランチ名> と git push origin --delete <ブランチ名> の両方を実行します。
Q. ブランチ名を変えたら、コミット履歴は変わりますか?
A. 変わりません。ブランチ名はコミットを指す名札なので、名前を変えてもコミットIDも履歴もそのままです。今回の検証でも、名前変更の前後で git branch -vv に表示されるコミットID(f42ca62)は同じでした。
まとめ
- ブランチはローカル・リモート・リモート追跡の3種類。消すコマンドはそれぞれ別
- ローカルの削除は git branch -d が基本。not fully merged で止まったら中身を確認して -D
- いまいるブランチは削除できない。git switch で移動してから削除する
- リモートの削除は git push origin --delete。remote ref does not exist は git fetch -p で解消
- 名前変更は git branch -m。リモートは「新名で push -u → 旧名を削除」の順
- 削除したブランチは、削除メッセージや reflog のコミットIDから git branch で復元できる
- 一括削除は、xargs の前までを先に流して対象を確認してから実行する
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「gitブランチの削除と名前変更|-d・-D・-mとリモートブランチ削除」
株式会社RJCでは、ブランチの削除や名前変更のような Git の基本操作を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。