'git branch -av' menampilkan cabang jarak jauh yang sudah tidak ada

168

Ini mungkin pertanyaan bodoh, tapi saya baru git dan saya melihat cabang terpencil yang tidak ada lagi.

$ git branch -a
* master
  remotes/origin/master
  remotes/origin/production

Saya tidak percaya cabang produksi ada jarak jauh dan tidak tahu mengapa itu masih menunjukkan secara lokal. Bagaimana saya bisa menghapus / menghapus cabang ini? Seperti apa upaya untuk menghapusnya:

$ git push origin :production

error: unable to push to unqualified destination: production
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@IP:puppet.git'

Saya dapat checkout cabang produksi yang seharusnya jauh tetapi mendapatkan ini:

$ git checkout origin/production
Note: checking out 'origin/production'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at c323996... added powerdns module, no really

Saya tidak tahu apa yang saya lakukan. Bantuan apa pun akan dihargai.

CarpeNoctem
sumber
apa hasil dari git branch -asetelah git fetch?
alediaferia
Duplikat yang saya usulkan memiliki jawaban yang menjelaskan lebih banyak daripada manojld di sini.
Cascabel

Jawaban:

338

Kamu harus melakukan:

git remote prune origin
manojlds
sumber
8
Terima kasih, itu berhasil! Bisakah Anda menguraikan apa yang terjadi di balik layar?
CarpeNoctem
12
Ini adalah cabang pelacakan jarak jauh pada repo lokal Anda dan Anda harus menghapusnya jika cabang dihapus pada repo jarak jauh.
manojlds
2
Jarang sekali saya menemukan dan menerapkan pertanyaan dan jawaban yang begitu mudah.
jleach
Hebat satu. Di lokal saya, saya melihat cabang-cabang aneh yang tidak memiliki koneksi dengan basis kode repo. Ketika saya menjalankan perintah ini, itu disetel cabang asal saya lokal dan kemudian saya menambahkan master hulu. Terima kasih
Ankur Srivastava
54

Jadi ada dua masalah. Dalam kedua kasus, ingatlah Git didistribusikan.

Pertama. Ketika Anda melakukan hal-hal seperti

$ git branch -a

operasi dilakukan pada repo lokal Anda BUKAN komputer jarak jauh. Dengan kata lain, repo lokal Anda melaporkan semua cabang yang diketahui. Ini bisa berupa cabang lokal (seperti 'master') atau cabang jarak jauh yang diambilnya dari jarak jauh. Sejak pengambilan terakhir, cabang 'produksi' dari repo jarak jauh telah berubah, tetapi repo lokal Anda tidak mengetahui hal ini. Jawaban dari manojlds , sudah benar. Lari

$ git asal prune jarak jauh

untuk menghapus cabang basi.

Perintah 'git push origin: production' digunakan untuk menghapus cabang dari repo git komputer jarak jauh. Bukan repo lokal Anda. Dalam hal ini, orang lain telah menghapus cabang pada git repo komputer jarak jauh, sehingga Anda melihat pesan kesalahan ini.

Berikut adalah tautan yang merangkum perintah-perintah ini.

Masalah kedua berkaitan dengan checkout.

Saat memeriksa cabang, Anda ingin melakukannya dari cabang lokal , bukan cabang jarak jauh. Itu sebabnya Anda mendapatkan kesalahan tentang KEPALA terpisah. The git-catatan repo memiliki penjelasan yang baik dari masalah secara rinci berdarah. Pada dasarnya frasa kuncinya adalah

Namun, ketika Anda checkout sesuatu yang tidak tepat, lokal, nama cabang, maka HEAD tidak lagi menjadi referensi simbolis untuk apa pun. Sebaliknya, itu sebenarnya berisi hash SHA-1 (id komit) dari komit yang Anda alihkan.

Sekarang, bagaimana cara memeriksa cabang lokal, yang sama dengan cabang jarak jauh?

Mudah, Anda membuat cabang lokal, pada saat checkout cabang terpencil.

$ git checkout -b my_local_branch asal / produksi

Pablo Maurin
sumber
20
git remote prune origin

benar, cukup menambahkan Anda dapat menggunakan --dry-runopsi, yang melaporkan cabang apa yang akan dipangkas dari repo lokal Anda, tetapi tidak benar-benar memangkasnya

git remote prune origin --dry-run
0xcrab
sumber