ambil dari asal dengan cabang jarak jauh yang dihapus?

441

Ketika saya lakukan git fetch origindan asal memiliki cabang dihapus, sepertinya tidak memperbaruinya di repositori saya. Ketika saya melakukannya git branch -rmasih menunjukkanorigin/DELETED_BRANCH .

Bagaimana saya bisa memperbaikinya?

Chris Muench
sumber
4
kemungkinan duplikat git remote branch dihapus tetapi masih muncul di 'branch -a'
imz - Ivan Zakharyaschev

Jawaban:

812

Anda perlu melakukan hal berikut

git fetch -p

Ini akan memperbarui basis data lokal cabang-cabang terpencil.

Pavan Yalamanchili
sumber
1
Terima kasih banyak. Saya menghapus cabang-cabang itu secara manual sebelumnya.
Maksim Dmitriev
4
Untuk beberapa alasan, perintah Anda tidak berfungsi, tetapi yang ini lakukan untuk cabang jarak jauh yang tidak ada di origingarpu saya : git fetch -p origin Ketika saya kemudian melakukan git branch -r cabang jarak jauh yang tidak ada tidak lagi muncul.
oldfartdeveloper
11
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 .
imz - Ivan Zakharyaschev
6
kawan ketika saya melakukan ini katanya [deleted] (none) -> origin/ < branch name >dan cabang masih ditampilkan di repo lokal tahu mengapa?
Buddhi741
4
Saya mendapat pesan yang mengatakan cabang saya telah dihapus, tetapi menjalankan git branchmasih menunjukkan cabang yang seharusnya dihapus.
sdfsdf
91

Dari http://www.gitguys.com/topics/adding-and-removing-remote-branches/

Setelah seseorang menghapus cabang dari repositori jarak jauh, git tidak akan secara otomatis menghapus cabang repositori lokal ketika pengguna melakukan git pull atau git fetch. Namun, jika pengguna ingin semua cabang pelacakan dihapus dari repositori lokal mereka yang telah dihapus dalam repositori jarak jauh, mereka dapat mengetik:

git asal prune jarak jauh

Sebagai catatan, -p param dari git fetch -psebenarnya berarti "prune".
Apa pun pilihan Anda, cabang jarak jauh yang tidak ada akan dihapus dari repositori lokal Anda.


sumber
Saya suka ini karena tidak mengambil sesuatu yang baru.
Marek R
30

Anda perlu melakukan hal berikut

git fetch -p

untuk menyinkronkan daftar cabang Anda. The pengguna git mengatakan

-p, --prune
Setelah mengambil, hapus referensi pelacakan jarak jauh yang tidak lagi ada di remote. Tag tidak dapat dipangkas jika diambil hanya karena tag otomatis mengikuti atau karena suatu --tagsopsi. Namun, jika tag diambil karena refspec eksplisit (baik pada baris perintah atau dalam konfigurasi jarak jauh, misalnya jika remote dikloning dengan --mirroropsi), maka tag tersebut juga harus dipangkas.

Saya pribadi suka menggunakan git fetch origin -p --progresskarena ini menunjukkan indikator kemajuan.

naXa
sumber
11

Ini berhasil untuk saya.

git remote update --prune
Antstud
sumber
6

Mengenai git fetch -p , perilakunya berubah di Git 1.9, dan hanya Git 2.9.x / 2.10 yang mencerminkan hal itu.

Lihat komit 9e70233 (13 Jun 2016) oleh Jeff King ( peff) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 1c22105 , 06 Jul 2016)

fetch: dokumen pemangkasan yang terjadi sebelumnya mengambil

Ini diubah dalam 10a6cc8 ( fetch --prune: Jalankan prune sebelum mengambil, 2014-01-02), tetapi tampaknya tidak ada orang dalam diskusi yang menyadari bahwa kami mengiklankan "setelah" secara eksplisit.

Jadi dokumentasi sekarang menyatakan:

Sebelum mengambil, hapus referensi pelacakan jarak jauh yang tidak lagi ada di remote

Itu karena:

Ketika kami memiliki cabang pelacak jarak jauh bernama " frotz/nitfol" dari pengambilan sebelumnya, dan hulu sekarang memiliki cabang bernama " frotz", mengambil akan gagal menghapus " frotz/nitfol" dengan " git fetch --prune" dari upstream. git akan memberitahu pengguna untuk menggunakan " git remote prune" masalah ini.

Ubah cara fetch --prunekerjanya " " dengan memindahkan operasi pemangkasan sebelum operasi pengambilan. Dengan cara ini, alih-alih memperingatkan pengguna konflik, secara otomatis memperbaikinya.

VONC
sumber