mengambil git tidak mendapatkan semua cabang

201

Saya telah mengkloning repositori, setelah itu ada orang lain yang membuat cabang baru, yang ingin saya mulai kerjakan. Saya membaca manual, dan sepertinya mati mudah. Anehnya itu tidak berfungsi, dan semua posting yang saya temukan menyarankan saya melakukan hal yang benar. Jadi saya akan tunduk pada cemoohan, karena pasti ada yang salah dengan ini:

Tindakan yang benar tampaknya menjadi

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

Pada titik ini ada masalah, untuk beberapa alasan setelah git fetchsaya tidak dapat melihat cabang remote dev-gml. Kenapa tidak? Jika saya mengkloning repositori baru, itu ada di sana, jadi tentu saja cabang jauh ada:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Saya sudah mencoba git update, git pull, git fetch --all, git pretty-pleasedi semua kemungkinan permutasi ...

Edward Newell
sumber
45
Apa yang git config --get remote.origin.fetchmenghasilkan? Jika tidak +refs/heads/*:refs/remotes/origin/*, mungkin seharusnya begitu.
torek
ya itu persis apa yang dihasilkannya
Edward Newell
3
Persis masalah yang sama, tetapi komentar di atas menyelesaikannya! Saya punya +refs/heads/master:refs/remotes/origin/masterdengan masterbukannya*
Mirko
1
Masalah yang sama untuk saya, tetapi tidak ada saran di halaman ini yang menyelesaikannya. Aneh.
Magnus
1
@ thoni56: Ya, ini kemungkinan karena klon yang dangkal.
Trần Việt Hoàng

Jawaban:

385

Masalahnya dapat dilihat ketika memeriksa remote.origin.fetchpengaturan
(Baris yang dimulai dengan $bash meminta dengan perintah yang saya ketik. Baris lainnya adalah output yang dihasilkan)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Seperti yang Anda lihat, dalam kasus saya, remote diatur untuk mengambil cabang master secara khusus dan hanya. Saya memperbaikinya sesuai di bawah ini, termasuk perintah kedua untuk memeriksa hasilnya.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Wildcard *tentu saja berarti segalanya di bawah jalur itu.

Sayangnya saya melihat komentar ini setelah saya menggali dan menemukan jawabannya dengan coba-coba.

AndASM
sumber
2
Ini mungkin jawaban yang diterima, karena ini benar-benar menyelesaikan masalah di pos asli.
LocalPCGuy
1
hanya catatan tambahan, saya harus menambahkan --replace-allparameter untuk mengganti semua nilai pada konfigurasi untuk sayaremote.origin.fetch
Garis M Suero
4
Perhatikan bahwa ini dapat terjadi jika Anda telah mengkloning repositori Anda dengan satu cabang saja, misalnyagit clone <url> --branch <branch> --single-branch [<folder>]
Narretz
2
Periksa jawaban
stux
5
Ini bisa terjadi ketika Anda mengkloninggit clone ... --depth 1
Anatolii Bivol
107

Saya memiliki masalah ini hari ini di repo.

Bukan itu +refs/heads/*:refs/remotes/origin/* masalah sesuai solusi teratas.

Gejala hanyalah itu git fetch originatau git fetchsepertinya tidak melakukan apa-apa, meskipun ada cabang terpencil untuk dijemput.

Setelah mencoba banyak hal, saya menghapus asal remote, dan membuatnya kembali. Itu tampaknya telah memperbaikinya. Tidak tahu kenapa

hapus dengan: git remote rm origin

dan buat ulang dengan: git remote add origin <git uri>

stux
sumber
14
Saya memiliki konfigurasi git yang benar remote.origin.fetchyaitu +refs/heads/*:refs/remotes/origin/*. Solusi di atas membantu saya.
Newbee
9
Solusi ini juga tepat bagi saya. Ini sangat disayangkan karena ini mengindikasikan ada potensi bug di Git.
Robert Oschler
2
Ini juga menyelesaikan masalah saya. Saya juga tampaknya memiliki masalah ini pada mesin dengan git versi 2.19.1v tetapi tidak mengalaminya di komputer lain dengan git versi 2.17.1
jerpint
6
git remote update originbekerja untukku. Saya kira sesuatu perlu menyegarkan?
Felipe Gerard
2
git remote update origintidak berfungsi untuk saya tetapi menghapus dan menambahkan remote tidak.
Anatoliy Kmetyuk
58

Pembaruan jarak jauh

Anda harus berlari

git remote update

atau

git remote update <remote> 

Kemudian Anda dapat menjalankan git branch -rdaftar cabang jarak jauh.

Periksa cabang baru

Untuk melacak cabang jarak jauh (baru) sebagai cabang lokal:

git checkout -b <local branch> <remote>/<remote branch>

atau (terkadang tidak berfungsi tanpa tambahan remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Lembar cheat git yang membantu

philipvr
sumber
5
Tetapi masalah saya adalah bahwa saya tidak dapat checkout cabang jarak jauh yang ada , karena klien git saya tidak menganggapnya ada. Lihat pertanyaanku. Perhatikan bahwa ketika saya menjalankan git fetchdiikuti oleh git branch -aitu tidak menampilkan semua cabang. Saya harus menghapus direktori kerja saya dan mengkloning kembali untuk melihat cabang dev-gmlyang dibuat kolaborator. Ini berhasil kali ini, tetapi kita akan sering bercabang!
Edward Newell
Hey @EdwardNewell, terima kasih atas jawabannya, hanya untuk memberi tahu Anda, tautan Anda cheat.errtheblog.com/s/git sudah mati untuk saya ...
Kjellski
Sudah lama sejak saya pertama kali mengajukan pertanyaan ini, dan saya baru saja ping karena seseorang diposting lagi. Saya menerima jawaban ini, meskipun awalnya tidak ada yang benar-benar bekerja untuk saya. Alasan saya akhirnya menandai ini benar adalah karena saya curiga bahwa apa yang ia tulis di samping Edit:mungkin berhasil. Itulah yang akan saya coba jika saya masih menghadapi masalah. HTH
Edward Newell
Sebagai catatan, bit yang membantu saya di sini adalah git remote update origin. Itu membuat cabang yang hilang terlihat melalui git branch -l -r. (Saya memang melihat git config --get remote.origin.fetchdan hasilnya +refs/heads/*:refs/remotes/origin/*seperti yang diharapkan.)
Robert Dodier
9

tulis dari terminal

git fetch --prune.

ini bekerja dengan baik.

Samet ÖZTOPRAK
sumber
1
Terima kasih! Saya mencoba banyak hal dan berpikir saya akan mencoba ini ... Sekarang untuk melihat apa yang sebenarnya saya lakukan ...
MadTurki
Apa fungsinya?
Adam Orlov
Dibutuhkan semua cabang yang tersedia. Lihatlah kepalanya.
Samet ÖZTOPRAK
4

Untuk membuatnya lebih spesifik, Buat cabang pelacakan, yang berarti Anda sekarang melacak cabang jauh.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Setelah itu kamu bisa

git branch   # to see the remote tracking branch "exp" created .

Kemudian untuk bekerja di cabang itu lakukan

git checkout branchname
git checkout exp

Setelah Anda membuat perubahan pada cabang. Anda dapat mengambil dan menggabungkan dengan cabang pelacakan jarak jauh Anda untuk menggabungkan perubahan Anda dan mendorong ke cabang jarak jauh seperti di bawah ini.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Semoga ini bisa membantu dan memberi Anda ide, cara kerjanya.

Swapna
sumber
1

Saya memiliki masalah yang sama, namun dalam kasus saya, saya bisa menarik / mendorong ke cabang terpencil tetapi git statustidak menunjukkan keadaan cabang lokal wrt yang jauh.

Juga, dalam kasus saya git config --get remote.origin.fetchtidak mengembalikan apa pun

Masalahnya adalah bahwa ada kesalahan ketik di .git/config file di garis ambil dari blok jarak jauh masing-masing. Mungkin sesuatu yang saya tambahkan secara tidak sengaja sebelumnya (kadang-kadang saya langsung melihat file ini, atau bahkan mengeditnya)

Jadi, periksa apakah entri jarak jauh Anda dalam .git/configfile sudah benar, misalnya:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*
Juh_
sumber
0

Ini bisa disebabkan oleh momen telapak tangan: jika Anda beralih di antara beberapa klon, mudah untuk menemukan diri Anda di pohon sumber yang salah mencoba menarik cabang yang tidak ada. Lebih mudah ketika klon memiliki nama yang mirip, atau repo adalah klon yang berbeda untuk proyek yang sama dari masing-masing dari beberapa kontributor. Klon git baru tampaknya akan menyelesaikan "masalah" itu ketika masalah sebenarnya adalah kehilangan fokus atau konteks kerja atau keduanya.

jerseyboy
sumber
0

Saya harus membuka Repositori Jarak Jauh GitExtensions saya karena sepertinya tidak ada yang berfungsi. Di sana saya melihat bahwa 2 cabang tidak memiliki repositori jarak jauh yang dikonfigurasi. setelah menyesuaikan terlihat sebagai berikutmasukkan deskripsi gambar di sini

Cabang pemberitahuan noExternal3masih menunjukkan tidak memiliki repositori jarak jauh. Tidak yakin kombo perintah bash apa yang akan ditemukan atau disesuaikan itu.

Maslow
sumber
0

Punya masalah yang sama hari ini menyiapkan repo saya dari awal. Saya mencoba semuanya, tidak ada yang berhasil kecuali menghapus asal dan menambahkan kembali kembali.

git remote rm origin
git remote add origin [email protected]:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched
Lukas Lukac
sumber
-1

Kami memiliki masalah yang sama dan Anda harus menggunakannya

git fetch

git push origin branch_name

git branch -r

Semoga ini bisa membantu seseorang menghadapi masalah yang sama

chazefate
sumber