[解決済み] git remote prune、git prune、git fetch --pruneなどの違いは何ですか?
質問内容
同じリポジトリで作業している人が、自分のローカル & リモートリポジトリからブランチを削除してしまったのです...。
Stack Overflow などでこの種の問題について質問している人の多くは、リモートトラッキングのブランチリストにまだブランチが表示されているという問題を抱えています。
git branch -a
をクリックしてください。
* master
develop
feature_blah
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
remotes/origin/random_branch_I_want_deleted
しかし、私の場合、あるはずのないブランチがローカルにあるのです。
* master
develop
feature_blah
random_branch_I_want_deleted
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
以下のいずれかを実行しても、ローカルで削除されないのですが。
$ git prune
もやってみた。
$ git remote prune origin
$ git fetch --prune
さらに役立つ情報 をチェックすると
git remote show origin
このように表示されます。
* remote origin
Fetch URL: utilities:homeconnections_ui.git
Push URL: utilities:homeconnections_ui.git
HEAD branch: master
Remote branches:
master tracked
develop tracked
feature_blah tracked
other123 tracked
other444 tracked
other999 tracked
Local branches configured for 'git pull':
develop merges with remote develop
feature_blah merges with remote other999
master merges with remote master
random_branch_I_want_deleted merges with remote random_branch_I_want_deleted
Local refs configured for 'git push':
develop pushes to develop (local out of date)
master pushes to master (up to date)
feature_blah pushes to feature_blah(up to date)
というセクションにしかないことに注意してください。
Local branches configured for 'git pull':
なぜ?
解決方法は?
これでは、イライラするのも無理はないですね。 一番いいのは、こうです。 すべてのリモートブランチには、潜在的に3つのバージョンが存在します。
-
リモートリポジトリ上の実際のブランチ
(例: リモートレポ at https://example.com/repo.git ,refs/heads/master
) -
そのブランチのローカルでのスナップショット(以下の場所に保存)
refs/remotes/...
)
(例: ローカルレポ。refs/remotes/origin/master
) -
そして、リモートブランチを追跡している可能性のあるローカルブランチは
(例: ローカルリポ。refs/heads/master
)
で始めましょう。
git prune
. これは
オブジェクト
は、参照されなくなったものを削除するのであって、参照先を削除するのではありません。 あなたの場合、ローカルブランチがあります。 という名前の参照があるということです。
random_branch_I_want_deleted
このオブジェクトは、そのブランチの履歴を表すいくつかのオブジェクトを参照しています。 つまり、定義上は
git prune
を削除することはありません。
random_branch_I_want_deleted
. 本当に
git prune
は、Git に蓄積されたデータのうち、何からも参照されていないものを削除する方法です。 一般的には、どのブランチの表示にも影響を与えません。
git remote prune origin
と
git fetch --prune
の下にある参照に対して操作します。
refs/remotes/...
(これらをリモート参照と呼ぶことにします)。 ローカルブランチには影響しません。 そのため
git remote
バージョンは、特定のリモートの下にあるリモート参照だけを削除したい場合に便利です。 それ以外の場合は、このふたつはまったく同じことをします。 つまり、簡単に言うと
git remote prune
と
git fetch --prune
は、上記2番の操作になります。たとえば、git web GUI でブランチを削除し、ローカルのブランチ一覧にはもう表示させないようにする場合 (
git branch -r
というコマンドを使用します。
ローカルブランチを削除するには
git branch -d
(または
-D
というのは、どこにもマージされていない場合です)。 ちなみに、リモートブランチが消えたときにローカルの追跡用ブランチを自動的に削除するような git コマンドはありません。
関連
-
[解決済み] [Solved] 作業ツリーのディレクトリ 'example.com' を作成できませんでした。パーミッションが拒否されました
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Git フェッチ リモートブランチ
-
[解決済み] .gitignoreと.gitkeepの違いは何ですか?
-
[解決済み] リモートにないトラッキングブランチを削除
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] 古いリモート git ブランチのクリーンアップ
-
[解決済み] ローカルのGitブランチをリモートのmasterブランチにプッシュするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】マージの競合が発生した git stash pop の取り消し
-
[解決済み】未マージファイルがあるため、Gitマージができない
-
git revert + git rebase 一度に複数のコミット_本然233的博客程式员息信网_git revert Multiple
-
[解決済み] git が「Pull is not possible because you have unmerged files」と表示するのはなぜですか?
-
[解決済み] git リモートリポジトリには、ローカルブランチにマージされていないコミットが含まれています。
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み] リモートにないトラッキングブランチを削除
-
[解決済み] Git リモートブランチを削除しても 'branch -a' に表示される
-
[解決済み] ローカルのgitブランチをすべて削除
-
[解決済み] Visual Studio Code - GitHubで削除されたブランチがVS Codeに表示されたままになっているのを削除しますか?