2013-06-15 17 views
7

私はリモートリポジトリと2つのクローンを持っています。
私はクローンの1つにブランチを作成します。 test。私はいくつかの仕事と2つのコミットをします。私はmasterブランチとpush -uブランチにマージします。
私はgit pullをもう一方のクローンで行います。
mastertestの両方があります。
最初のクローンプロジェクトで私は:
testブランチリモートリポジトリを削除します。
testは、リモートリポジトリで削除されます。
私はgit branch -D testを実行し、testブランチもローカルで削除されます。
私はgit branch -aをすれば私が手:削除されたリモートブランチが表示されるのはなぜですか?

*master 
remotes/origin/master  

今私はgit pullを行う第二のリポジトリに。
ローカルtestが削除されているようですが、gitはリモートのtestブランチがまだ存在すると「考える」ようです。
私はgit branch -aをすれば私が手:

* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/test  

はなぜ削除testブランチはリモートブランチとして表示されていますか?

答えて

3

このコマンドを使用してみてくださいgit remote prune origin。削除されたブランチは消えます。これにより、リモートブランチへのローカル参照が削除されます。

+0

実際、私は 'git'を実行するように促すのと同じ方法でこれを行うよう促す' git'を期待していました。なぜプロンプトが表示されないのですか?プロンプトが表示されているのを見ましたが、別のユースケースにあったのでしょうか? – Cratylus

+0

ええ、私はあなたが意味することを知っています。私は本当に私がgitをプルしているときにそれについて何かをプロンプトしたと言うことはできないので、私はそれが異なるユースケースだったと推測しています。おそらく何かを削除したブランチにプッシュしようとしましたか? – crea1

10

デフォルトのオプションgit fetch(したがってgit pull)は、削除されたリモートブランチをプルーニングしません。私はこのデフォルトの背後にある論理が何であるか分かりません。いずれにしても、削除されたリモートブランチを剪定するには、いずれかの

git fetch -p 

でフェッチまたは明示的

git remote prune [-n] <name> 

を実行します。 -nフラグを指定すると、どのブランチがプルーニングされるのかが報告されますが、実際にプルーニングされません。詳細については、git-fetch(1)およびgit-remote(1)を参照してください。

+0

しかし、リポジトリが私のものでなければ、私は ''プルーン ''する必要があることをどのように知っていますか? – Cratylus

+1

'git remote prune -n​​ 'を実行するとリストを取得できますが、フェッチするたびに必ず 'git fetch -p'を実行するだけです。私は 'git pull'を使っていないので、' git pull'にオプションがないことに気づいていませんでした。 –

関連する問題