Git: memperbarui informasi cabang jarak jauh

125

Dalam repositori git, cabang jarak jauh yang tidak saya lacak dihapus. Saat saya mengetik

git branch -r

cabang yang dihapus masih muncul (dan saya bisa memeriksanya)

Perintah git apa yang harus saya jalankan untuk memperbarui info ini?

Bain Markev
sumber

Jawaban:

39

Jika Anda melakukan sesuatu seperti

git branch -d -r remote_name/branch_name

Anda hanya menghapus checkout lokal Anda. Perintah ini tidak melakukan apa pun pada repositori jarak jauh, itulah sebabnya mengapa ia masih muncul.

Larutan:

git push origin :branch_name

akan menghapus cabang jarak jauh (perhatikan ':'), dan

git branch -d branch_name

akan menghapus checkout lokal Anda.

( Referensi )

Garrett Hyde
sumber
146
Anda juga dapat menjalankan 'git asal prune remote' untuk membersihkan referensi jarak jauh Anda.
cmcginty
3
Itu akan menghapus semua cabang yang tidak lagi dilacak oleh repositori jarak jauh. Jadi, berhati-hatilah.
Garrett Hyde
4
Saya pikir itu juga berguna untuk mengetahui bahwa, meskipun sedikit lebih bertele-tele, Anda dapat menggunakan git push <remote> --delete <branchname>untuk menghapus cabang jarak jauh juga.
AeroCross
Ini biasanya berfungsi, tetapi saya melihat situasi hari ini di mana daftar jarak jauh tidak diperbarui, jadi saya mencoba untuk menghapus cabang yang tidak ada di sana. Maka solusi @Flo di bawah ini diperlukan terlebih dahulu.
Lakukan
284

Jika itu adalah cabang di repositori jarak jauh yang dihapus, dan Anda ingin memperbarui semua cabang pelacakan jarak jauh lokal sekaligus, Anda bisa menggunakan

$ git remote prune <remotename>

untuk menghapus semua cabang pelacakan jauh basi untuk remote yang diberikan (yaitu yang mengikuti cabang yang dihapus dalam repositori jarak jauh).

Lihat git remotedokumentasi.

Jakub Narębski
sumber
@Casey dan @Jakub terima kasih atas jawaban Anda! Mengapa informasi cabang jarak jauh yang disimpan secara lokal tidak diperbarui pada saat saya menggunakannya lagi git fetch?
JJD
4
@JJD: Karena Anda mungkin telah mendasarkan pekerjaan Anda pada cabang jarak jauh yang tidak lagi ada di sini. Karena itu menghilang tanpa meminta dianggap ide yang buruk. Itu sebabnya Anda perlu memangkas cabang pelacakan jarak jauh secara eksplisit.
Jakub Narębski
Apakah "git gc" membersihkan cabang-cabang terpencil yang basi juga?
James Wald
@ JamesWald: Tidak, tidak. git gchanya mengemas objek dan referensi, dan menghapus objek yang tidak direferensikan saat berada di sana (dengan beberapa margin keamanan).
Jakub Narębski
186
git remote update --prune

Harus menyegarkan semua cabang remote, menambah yang baru dan menghapus yang dihapus.

Sunting: Perintah pembaruan jarak jauh pada dasarnya mengambil daftar cabang di kendali jarak jauh. The --prunepilihan akan menyingkirkan Anda lokal cabang pelacakan jarak jauh yang mengarah ke cabang-cabang yang tidak eksis lagi pada jarak jauh .

Flo
sumber
Ini berhasil untuk saya. Saya perlu menghapus cabang jarak jauh yang karena alasan tertentu tidak dapat dihapus oleh 'git push origin: <branch_name>'
n0denine
Apakah akurat mengatakan bahwa jawaban ini melakukan apa yang dilakukan oleh Jakub Narębski dan banyak lagi? Yaitu, memangkas dan mengambil pembaruan?
Frank Tan
14

Juga berguna untuk melihat cabang jarak jauh baru:

git fetch --all
Aidan Donohoe
sumber
Ini sangat membantu saya. Beberapa bug di Visual studio git mencegah menampilkan cabang baru yang dibuat setelah kloning. Perintah ini membantu menunjukkan cabang
Venkatesh Muniyandi
nice n simple thx dude, punya lencana jawaban perunggu di rumah :)
danday74
2

Anda dapat menggabungkan -rdan -dmenandai untuk menghapus cabang jarak jauh.

mikerobi
sumber
tip yang bagus! Namun, dalam hal ini, ada beberapa cabang yang sudah dihapus, pasti ada perintah untuk mengambil pembaruan ini
Bain Markev
2

Coba perintah ini

git gc --prune=now
MarceloCouto
sumber