Di tengah informasi yang disajikan oleh git help fetch
, ada item kecil ini:
-p, --prune
After fetching, remove any remote-tracking branches which no longer exist on the remote.
Jadi, mungkin, git fetch -p
apa yang Anda cari?
EDIT: Ok, bagi mereka yang masih memperdebatkan jawaban ini 3 tahun setelah fakta, berikut adalah sedikit informasi tentang mengapa saya mempresentasikan jawaban ini ...
Pertama, OP mengatakan mereka ingin "menghapus juga cabang-cabang lokal yang dibuat dari cabang-cabang terpencil [yang tidak ada lagi di remote]". Ini tidak mungkin secara ambigu dalam git
. Ini sebuah contoh.
Katakanlah saya memiliki repo di server pusat, dan memiliki dua cabang, dipanggil A
dan B
. Jika saya mengkloning repo itu ke sistem lokal saya, klon saya akan memiliki referensi lokal (belum cabang sebenarnya) yang dipanggil origin/A
dan origin/B
. Sekarang katakanlah saya melakukan hal berikut:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C <some hash>
Fakta terkait di sini adalah bahwa saya karena suatu alasan memilih untuk membuat cabang pada repo lokal saya yang memiliki nama yang berbeda dari asalnya, dan saya juga memiliki cabang lokal yang (belum) ada pada repo asal.
Sekarang katakanlah saya menghapus kedua A
dan B
cabang pada repo jarak jauh dan memperbarui repo lokal saya ( git fetch
dari beberapa bentuk), yang menyebabkan referensi lokal saya origin/A
dan origin/B
menghilang. Sekarang, repo lokal saya memiliki tiga cabang masih, A
, Z
, dan C
. Tak satu pun dari ini memiliki cabang yang sesuai pada repo jarak jauh. Dua dari mereka "diciptakan dari ... cabang-cabang terpencil", tetapi bahkan jika saya tahu bahwa dulu ada cabang yang disebut B
asal, saya tidak punya cara untuk mengetahui bahwa Z
itu diciptakan dariB
, karena diganti namanya dalam proses, mungkin karena alasan yang baik. Jadi, sungguh, tanpa beberapa proses eksternal merekam metadata asal cabang, atau manusia yang mengetahui sejarah, tidak mungkin untuk mengatakan yang mana dari tiga cabang, jika ada, OP menargetkan untuk dihapus. Tanpa beberapa informasi eksternal yang git
tidak secara otomatis menjaga untuk Anda, git fetch -p
adalah sedekat yang Anda bisa dapatkan, dan metode otomatis apa pun untuk benar-benar mencoba apa yang diminta OP berisiko mengambil terlalu banyak cabang, atau melewatkan beberapa yang OP akan sebaliknya ingin dihapus.
Ada skenario lain, juga, seperti jika saya membuat tiga cabang terpisah origin/A
untuk menguji tiga pendekatan berbeda untuk sesuatu, dan kemudian origin/A
hilang. Sekarang saya memiliki tiga cabang, yang jelas tidak semuanya cocok dengan nama-bijaksana, tetapi mereka diciptakan dari origin/A
, sehingga interpretasi literal dari pertanyaan OPs akan membutuhkan penghapusan ketiganya. Namun, itu mungkin tidak diinginkan, jika Anda bahkan dapat menemukan cara yang dapat diandalkan untuk mencocokkannya ...