1. ホーム
  2. git

git fetch origin --prune でローカルブランチが削除されない?

2023-08-25 19:31:50

質問

ある時、私は次のように考えました。 git fetch origin --prune は、サーバー上に存在しないローカルブランチを削除すると思っていました。どういうわけか、これは今のところ私の経験ではありません。

このコマンドを実行しましたが、ローカル ブランチは削除されませんでした。それは ではなく であり、現在チェックアウトされていません。私が実行した git branch -vv を実行してこの情報を確認すると、次のようになります。

feature/MyGreatFeature           f30efc7 [origin/feature/MyGreatFeature: gone]

ということで、消えていることは分かっているようです。なぜ、私のローカルブランチは削除されないのでしょうか?

実行中 git version 2.7.4 (Apple Git-66)

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

様々なプルーンオプション( git remote update --prune , git remote prune , git fetch --prune ) だけ リモート追跡ブランチを削除する。 1

不要になったローカルブランチは手動で削除するか、リモート追跡ブランチが存在しない場合はその上流設定を変更または削除する必要があります。 各ローカルブランチには、今は存在しない、あるいは存在しなかったリモートブランチやブランチを記録することができることに注意しましょう。 ただし、バージョン 1.8.5 以降では、いくつかのコマンドが上流を "gone"、あるいは無効であると報告します。 --unset-upstream .


1 より正確には、コマンドラインから refspec マッピングを行った後にデスティネーション ref を削除するか、または fetch の行を設定から削除します。 したがって、フェッチミラーの場合、それらは ができます。 ローカルブランチを削除することができます。 しかし、ほとんどのクローンはフェッチ ミラーとしてセットアップされていません。

最近、複雑なマッピングに関するバグフィックスがあり、Gitがマッピングされたブランチを刈り取るべきでない場合に刈り取らないようにしました。 通常のリポジトリ(通常のクローンや純粋なフェッチミラー)については、これらの修正は何の影響もありません。 fetch の構成が複雑な場合にのみ重要です。