86

Git で bash オートコンプリートを使用すると、もう持っていない古いリモートのブランチが表示され続けます。私が行うと、git branch -laそれらの古いリモコンとブランチが表示されますが、そうでgit branch -lはありません。Als .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

また、レポを再クローンできるという事実も認識していますが、それはただの不正行為です;-)

4

6 に答える 6

148

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

リモート リポジトリの 1 つの古いリモート追跡ブランチ (リモート リポジトリで削除されたブランチ) を削除するには、次を実行します。

git remote prune <remote>

マニュアルページまたはを引用するにはgit remote

プルーン

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

--dry-run オプションを使用すると、どのブランチが剪定されるかを報告しますが、実際にはそれらを剪定しません。

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

リモートリポジトリを削除する通常の方法は、実行することです

git remote rm <remote>

これにより、リモートが から削除され.git/config、リモート追跡ブランチが削除されます。

の下のディレクトリを削除するだけで.git/refs/remotes/は、ブランチが残ります。次に、それらを手動で削除する必要があります。

git branch -rd <remote>/<branchname>

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

于 2013-07-04T13:42:04.550 に答える
16

私が使う

git push origin :remote_branch

サーバーからブランチを削除します。

git remote prune origin

サーバーにもう存在しないリモート参照を削除するには

于 2013-07-04T13:07:07.233 に答える
6

注: git remote prune が答えですが、git 2.0.1 (2014 年 6 月 25 日) 以降、git remote rm リモート追跡ブランチを削除することから始まることに注意してください。
したがって、. の後に古いブランチをクリーンアップする必要がないことを願っていgit remote rmます。

Jens Lindströmによるコミット b07bdd3を参照してください ( )jensl

remote rm: リモート構成を最後に削除します

リモートを削除する場合は、リモート構成を削除する前に、リモート追跡ブランチを削除してください。
このようにして、リモート追跡ブランチの削除中に操作が失敗または中止された場合、コマンドを再実行して操作を完了することができます


ただし、必要に応じて、最初に設定していれば、単純なgit fetchもので十分です。

git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true
于 2014-07-27T18:58:59.440 に答える
4

わかりました。問題は、リモートがもう存在しないことですが、git データベースのどこかに存在します。リモコンを再度追加してから、

git remote prune theremote
git remote rm theremote
git gc --prune=now

その後、それらはリストから消えます。どういうわけか、推測する前にそれらを正しく削除しませんでした。

于 2013-07-04T14:11:07.947 に答える