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?

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 )


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.


@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 .


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

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.


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

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.