Cabang jarak jauh tidak muncul di "git branch -r"

140

Saya telah mendorong ke repositori Bitbucket jarak jauh dan baru-baru ini seorang kolega telah mendorong cabang baru yang dia buat ke repositori yang sama.

Saya mencoba mengambil perubahan yang dia unggah.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r origin / master

Di UI web untuk Bitbucket saya bisa melihat cabang yang dia buat. Bagaimana saya bisa melakukan ini?

Percobaan berikutnya:

$ git fetch bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Jika cabang yang dia buat bernama new_branch_b, haruskah saya melihat yang berikut ini?

$ git branch -r
origin/master
origin/new_branch_b

Percobaan ketiga:

$ git remote update
Fetching bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Percobaan keempat:

[remote "bitbucket"]
url = https://[email protected]/user/repo.git

Saya menelepon remote bitbucketdaripada asal (setidaknya itulah yang saya ingat; saya mengaturnya beberapa waktu yang lalu)

Percobaan kelima:

Saya memperbarui konfigurasi jarak jauh Bitbucket sesuai jawaban kan :

$ git config -e

[remote "bitbucket"]
    url = https://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Bagi kebanyakan orang itu akan disebut asal:

[remote "origin"]
    url = https://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Setelah itu,

$ git remote update

Fetching bitbucket
Password for 'https://[email protected]':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... dan seterusnya.

Saya pikir git fetch originjuga akan berhasil git remote update.

ketakutangal
sumber
1
Keren, tapi mungkin lebih masuk akal untuk digunakan refs/remotes/bitbucket/*daripada refs/remotes/origin/*.
kan
Terima kasih, benar-benar memperhatikan tentang konsistensi penamaan. Mungkin lebih masuk akal untuk mengubah bitbucket ke asalnya! Konvensi dan semua itu :)
feargal
1
git fetch originmelakukan pekerjaan
Dish

Jawaban:

110

The remotebagian juga menspesifikasikan mengambil aturan. Anda bisa menambahkan sesuatu seperti ini ke dalamnya untuk mengambil semua cabang dari remote:

fetch = +refs/heads/*:refs/remotes/origin/*

(Atau ganti origindengan bitbucket.)

Silakan baca di sini: 10.5 Git Internals - The Refspec

kan
sumber
3
Ini memperbaiki masalah percabangan saya yang sedang berlangsung di Git yang saya alami selama berminggu-minggu. Tiba-tiba semua hal pembaruan jarak jauh git benar-benar mulai berfungsi. Terima kasih!
PålOliver
2
Untuk beberapa alasan, itu terlihat seperti: fetch = +refs/heads/master:refs/remotes/origin/masterbagiku. Mengganti masterdengan *memperbaiki masalah saya.
Sebastian Blask
2
Ini sangat berguna jika Anda telah mengubah klon dangkal menjadi tidak dangkal.
Warpzit
@kan Tahukah Anda mengapa hal ini terkadang terjadi? Itu hanya terjadi pada saya ketika git clonesebuah proyek. Saya tidak ingat pernah melakukan sesuatu yang istimewa dengan git lokal saya.
dotnetCarpenter
@dotnetCarpenter Tidak yakin ... tidak pernah terjadi pada saya secara tidak terduga. Apakah mungkin cloneitu terputus dan kemudian dilanjutkan? Atau ada hal lain yang mengakses repo secara bersamaan?
kan
223

Perbarui remote Anda jika Anda masih belum melakukannya:

$ git remote update
$ git branch -r
Bruno
sumber
1
Saya menggunakan klien GitHub di Win dan terkadang tidak memperbarui cabang jarak jauh. Baris pertama "git remote update" berfungsi dengan baik. Mudah & bersih
Stefano Buora
setelah git remote updatesaya bisa melihat cabang baru di UI. Terima kasih
Tinkaal Gogoi
Itu tidak membantu.
dKab
Saya pikir saya sudah berhasil mengambil cabang tetapi hanya perlu melihatnya terdaftar dengan git branch -r. Di git-scm.com/docs/git-branch dikatakan "Opsi -r menyebabkan cabang pelacakan jarak jauh dicantumkan, dan opsi -a menampilkan cabang lokal dan jarak jauh". git remote updatemengambil semua cabang dari semua remote yang terdaftar di git remote -v.
Rock Lee
Setelah menjalankan ini, saya dapat menjalankan git checkout origin/masterdan kemudian mencabangkan kepala yang terlepas itu ke cabang utama sayagit branch master; git checkout master
Dfranc3373
37

Jika Anda mengkloning dengan --depthparameter, itu disetel .git/configuntuk tidak mengambil semua cabang, tetapi hanya master.

Anda cukup menghilangkan parameter atau memperbarui file konfigurasi dari

fetch = +refs/heads/master:refs/remotes/origin/master

untuk

fetch = +refs/heads/*:refs/remotes/origin/*
DonPaulie
sumber
2
Terima kasih! Jawaban Anda sebenarnya memperbaiki masalah dengan mudah dan sepertinya cara yang benar untuk melakukannya. Tetapi Anda harus menambahkan bahwa file konfignya ada .git/config, sehingga orang dapat menemukannya.
dotnetCarpenter
19

Saya memiliki masalah yang sama. Tampaknya solusi termudah adalah dengan menghapus remote, membacanya, dan mengambilnya.

jessicah
sumber
1
Menghabiskan begitu banyak waktu untuk menemukan jawaban ini. Ini bekerja tanpa masalah. Terima kasih. :)
kisanme
1
Bekerja untuk saya juga, cukup aneh bahwa ini menyelesaikannya
CailinP
1
git remote -vakan menunjukkan remote Anda sehingga Anda bisa mendapatkan url, git remote rm originakan menghapusnya, git remote add origin <url>akan menambahkannya kembali.
Siddhartha
Ini berhasil untuk saya. Saya memiliki submodul git yang entah bagaimana, tidak mengambil cabang jarak jauh selain master. Menghapus dan menambahkannya lagi menyelesaikannya.
Zamrony P. Juhara
bekerja untuk saya, tapi sekarang saya mendapat peringatanwarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana
8

Sayangnya, git branch -adan git branch -rjangan tidak menunjukkan semua cabang terpencil, jika Anda belum melaksanakan "git fetch".

git remote show originbekerja secara konsisten sepanjang waktu. Juga git show-refmenampilkan semua referensi di repositori Git. Namun, ini berfungsi seperti git branchperintah.

Thushan
sumber
Berguna! bekerja untuk saya
Sarjerao Ghadage