Git remote branch dihapus, tetapi tetap saja muncul di 'branch -a'


552

Katakanlah saya memiliki cabang yang bernama coolbranchdi repositori saya.

Sekarang, saya memutuskan untuk menghapusnya (baik jarak jauh dan lokal) dengan:

git push origin :coolbranch
git branch -D coolbranch

Bagus! Sekarang cabang benar-benar dihapus.

Tapi ketika saya lari

git branch -a

Saya masih mendapatkan:

remotes/origin/coolbranch

Sesuatu yang perlu diperhatikan, adalah bahwa ketika saya mengkloning repositori baru, semuanya baik-baik saja dan git branch -atidak menunjukkan cabang.

Saya ingin tahu - apakah ada cara untuk menghapus cabang dari branch -adaftar tanpa mengkloning instance baru?



58
Jika Anda git fetch -p(atau git pull -p) maka cabang jarak jauh akan dipangkas.
yoyo

Jawaban:


688

git remote prune origin, seperti yang disarankan dalam jawaban lain, akan menghapus semua cabang basi tersebut. Mungkin itulah yang Anda inginkan dalam kebanyakan kasus, tetapi jika Anda ingin menghapus cabang pelacakan jarak jauh tertentu, Anda harus melakukannya:

git branch -d -r origin/coolbranch

( -rMudah dilupakan ...)

-rdalam hal ini akan "Mendaftar atau menghapus (jika digunakan dengan -d) cabang pelacak jarak jauh." menurut dokumentasi Git yang ditemukan di sini: https://git-scm.com/docs/git-branch


11
git remote prune originatau segala bentuk git fetch --prunepenandaan tidak berfungsi untuk saya dalam kasus saya. ... Tapi git branch -d -r origin/feature/branch-nameberhasil. Saya tidak yakin apakah itu ada hubungannya dengan itu berada di bawah featurenamespace (git flow) tapi itulah caranya turun, kalau-kalau ada googler menemukan itu terjadi pada mereka.
Misterparker

8
Apakah ada alasan mengapa ini perlu? Tampaknya sangat buruk untuk meninggalkan nama cabang yang tidak ada ini dalam daftar dan tidak secara otomatis memangkasnya.
akronymn

296

Mencoba:

git remote prune origin

Dari dokumentasi jarak jauh Git :

memangkas

Menghapus semua cabang pelacakan jarak jauh basi di bawah <name>. Cabang-cabang basi ini telah dihapus dari repositori jarak jauh yang dirujuk oleh <name>, tetapi masih tersedia secara lokal di "remote / <nama>".

Dengan opsi --dry-run, laporkan cabang apa yang akan dipangkas, tetapi tidak benar-benar memangkasnya.


1
Untuk kelengkapan: harus mirip dengan yang git pull --prunedisebutkan di stackoverflow.com/a/17983126/94687 Dan:git remote update --prune
imz - Ivan Zakharyaschev

230

Jangan lupakan yang mengagumkan

git fetch -p

yang mengambil dan memangkas semua asal.


Untuk kelengkapan: harus sama git remote prune origindan mirip dengan yang git pull --prunedisebutkan di stackoverflow.com/a/6127884/94687 dan stackoverflow.com/a/17983126/94687 . Dan:git remote update --prune
imz - Ivan Zakharyaschev

2
Tetapi cabang akan tetap terlihat jika Anda menjalankangit branch -a
Nikhil Sahu

1
@NikhilSahu: Saya tidak melihat cabang-cabang jauh yang telah dihapus lagi dengangit branch -a
user276648

20

Dalam kasus khusus kami, kami menggunakan Stash sebagai repositori remote Git kami. Kami mencoba semua jawaban sebelumnya dan tidak ada yang berhasil. Kami akhirnya harus melakukan hal berikut:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

Kemudian ketika pengguna pergi untuk melakukan perubahan, mereka perlu melakukan hal berikut:

git fetch -p

git branch -d branch-namebekerja untukku. Pemberitahuan -Duntuk -d. Bahkan ketika saya mencoba dengan huruf besar D -Ditu membuat cabang baru dengan nama -D
RP-

1
"-D" adalah cara untuk memaksa penghapusan terlepas dari status push atau gabungannya. Jelas berhati-hati menggunakannya, tetapi dalam banyak kasus, itu perlu.
Shadowvail

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.