【Git】git branch -a に残る削除済みリモートブランチの正体と解消方法

git branch -a に残る削除済みリモートブランチ

Git を使って開発していると、
GitHub 上では消えているはずのブランチが、ローカルでは残って見える
という現象に遭遇することがあります。

error: unable to delete 'feat/base': remote ref does not exist
error: failed to push some refs

発生した状況

以下のような流れで問題が起きました。

  1. git branch -a を実行
  2. remotes/origin/feat/base が表示される
  3. GitHub の Web サイトを見ると、そのブランチはすでに削除済み
  4. 削除しようとして以下を実行
git push origin :feat/base

エラーが出る

結論:原因は「ローカルのリモート追跡情報が古い」

この問題の原因はとてもシンプルです。

GitHub 上の状態と、ローカルに保存されている origin/* 情報がズレている

git branch -a で表示される
remotes/origin/*実体ではなくキャッシュ情報 です。

つまり、

  • GitHub:すでに削除済み
  • ローカル:まだ「あることになっている」

という状態になっていました。


正しい解決方法(これだけでOK)

git fetch --prune を実行する

git fetch --prune

このコマンドを実行すると、

  • リモート(GitHub)に存在しないブランチを
  • ローカルの remotes/origin/* から自動削除

してくれます。

実行後に確認:

git branch -a

remotes/origin/feat/base が消えていれば解消完了です


なぜ git push origin :branch は失敗したのか?

git push origin :feat/base

このコマンドは、

「リモートに存在する feat/base を削除せよ」

という意味です。

しかし今回は、

  • すでに GitHub 側にブランチが存在しない
  • 削除対象が見つからない

ため、

remote ref does not exist

というエラーになりました。

操作自体は間違っていません。
単に「もう消えていた」だけです。


今後ズレを防ぐおすすめ設定

毎回 --prune を付けるのが面倒な場合は、
以下を設定しておくと便利です。

git config --global fetch.prune true

これにより、

  • git fetch
  • git pull

を実行するたびに、
不要なリモート追跡ブランチを自動で削除 してくれます。


よくある勘違いポイント

  • git branch -a に出ている = GitHub に存在する
  • ⭕ 実際は「ローカルに残っている情報」なだけ

Git は「安全側」に倒れる設計のため、
勝手にブランチを消さない のが仕様です。


まとめ

  • GitHub で消したブランチが git branch -a に残ることがある
  • 原因はローカルのリモート追跡情報のズレ
  • 解決方法はこれだけ👇
git fetch --prune
  • 定期的にズレを防ぐなら fetch.prune = true を設定

git clone から新しいブランチ作って mainにマージするまで

git ブランチ作成からマージまで

ソースをGitHubからcloneでローカルにコピーし

新しいブランチを作成してコード書いてmainにマージする一連のコマンド

gitGit (git-scm.com)↓URLからダウンロードしインストールする

https://git-scm.com/

git –version

config で名前とメアドを設定する

git config --global user.name 名前
git config --global user.email メアド
git config --global user
git config –global user

GitHub ソースコードをローカルに保存

GitHub リポジトリ内[Code]をクリック[HTTPS]のURLをコピーする

GitHubからHTTPSをコピー

コピーしたURLを使い、 git clone コマンドで ローカルに保存する

git clone https://github.com/xxxxxx/xxxxx.git
git cloneコマンド実行
git cloneコマンド実行

ブランチ (branch) 作成

ブランチ一覧を確認し 新しいブランチを作成後 リモートにも保存する

# ↓ブランチ一覧を確認
git branch -a
# ↓mainにブランチ切替
git checkout main
# ↓「dev1」というにブランチ作成
git checkout -b dev1
# ↓「dev1」ブランチをGitHub(リモート)にも同じものを作る
git push -u origin dev1
# ↓「dev1」ブランチに切替
git checkout dev1
新しい branch 作成
新しい branch 作成

作成したブランチで作業

作成したブランチで作業し、 GitHubに(アップロード)プッシュする

# ↓変更したファイルをgitに追加
git add --all
# ↓変更した内容のコミットとコメント
git commit -m "初回PUSH"
# ↓gitの 「dev1」ブランチにプッシュする
git push origin dev1
git push まで
git push まで

mainにマージ

「dev1」の変更内容をmainにマージする

# ↓ ブランチをmainに変更
git checkout main
# ↓ dev1の内容を mainにマージ
git merge dev1
# ↓ mainをGitHubに送信(push)
git push origin main
git merge コマンド