1. ホーム
  2. git

[解決済み] Git から古いリモートブランチを削除する

2023-06-09 01:40:44

質問

Gitでbashのオートコンプリートを使用すると、もう持っていない古いリモートのブランチが表示され続けてしまいます。私が git branch -la を実行すると、古いリモートとブランチが表示され、一方 git branch -l では表示されません。A ls .git/refs/remotes/ もそれらを表示します。しかし、それらは私の .git/config を実行しても表示されません。 git remote show .

では、今オートコンプリートリストが長すぎるため、どのようにそれらを取り除くか。

私はすでに試しました。

git reflog expire --expire=now --all
git gc --prune=now
rm .git/refs/remotes/theoldremote
git remote prune theoldremote

レポを再クローンすればいいということも知っていますが、それはただのズルです ;-)

どのように解決するのですか?

Git は、リモートリポジトリでブランチが削除された場合、(ローカルの)リモートトラッキングブランチを自動的に削除しません。さらに、V2.0.1 より前のリモート追跡ブランチは、git の設定からリモートを削除しても削除されない場合がありました(VonC の回答を参照)。

リモートリポジトリのひとつについて、古くなったリモート追跡ブランチ(リモートリポジトリで削除されたブランチ)を削除するには、次のコマンドを実行します。

git remote prune <remote>

マニュアルページを引用する場合や git remote :

プルーン

name>の下にあるすべての古い追跡ブランチを削除します。これらの古いブランチは によって参照されているリモートリポジトリからはすでに削除されています。 が、ローカルではまだ "remotes/<name>" で利用可能です。

dry-runオプションでは、どのブランチが剪定されるかを報告しますが、実際に剪定は行いません。 実際に刈り込まれることはありません。

しかし、あなたの質問からすると、あなたは手動で .git/refs/remotes/theoldremote を削除したようなので、Git はリモート追跡ブランチが所属していたリモートリポジトリのことを知らなくなったのです。これは本来のやり方ではありません。

リモートリポジトリを削除する通常の方法は、次のように実行します。

git remote rm <remote>

これは、リモートを .git/config からリモートを削除し、リモートを追跡していたブランチを削除します。

の下のディレクトリを削除するだけなら .git/refs/remotes/ の下のディレクトリを削除しただけでは、ブランチが残ってしまいます。その場合は、手動で削除する必要があります。

git branch -rd <remote>/<branchname>

オプション -r はリモートブランチを削除するために必要です。