Git: Tidak dapat melihat cabang jarak jauh baru

116

Seorang kolega mendorong cabang jarak jauh baru ke origin / dev / homepage dan saya tidak dapat melihatnya ketika saya menjalankan:

$ git branch -r

Saya masih melihat cabang-cabang terpencil yang sudah ada sebelumnya.

Saya berasumsi ini karena referensi jarak jauh lokal saya tidak up-to-date maka ketika saya menjalankan git pull tidak ada yang terjadi karena git pull hanya menarik cabang yang berfungsi saat ini, benar? Tidak seperti git push yang mendorong semua cabang yang memiliki perubahan ke cabang jarak jauh yang sesuai?

hybrid9
sumber
1
berhasil melupakan git pull, terima kasih
JelenaČuklina
1
Dalam kasus saya git fetch <name-of-remote>berhasil. Tanpa nama remote, itu TIDAK berhasil.
Menno Deij - van Rijswijk

Jawaban:

164

Pertama, periksa kembali apakah cabang tersebut benar-benar didorong dari jarak jauh, dengan menggunakan perintah git ls-remote origin. Jika cabang baru muncul di keluaran, coba dan berikan perintah git fetch: itu harus mengunduh referensi cabang dari repositori jarak jauh.

Jika cabang jarak jauh Anda masih tidak muncul, periksa kembali (pada ls-remotekeluaran) apa nama cabang pada kendali jarak jauh dan, secara khusus, jika diawali dengan refs/heads/. Ini karena, secara default, nilai remote.<name>.fetchis:

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

sehingga hanya referensi jarak jauh yang namanya dimulai dengan yang refs/heads/akan dipetakan secara lokal sebagai referensi pelacakan jarak jauh di bawah refs/remotes/origin/(yaitu, mereka akan menjadi cabang pelacakan jarak jauh)

Marco Leogrande
sumber
4
Saya dapat melihat cabang jarak jauh baru setelah melakukan git fetch origin, tetapi tidak yakin apa bedanya jika saya hanya melakukan git fetch? Saya membaca tentang pembaruan jarak jauh git, tetapi tidak jelas apa yang akan dilakukan. Apakah saya perlu menjalankan git fetch untuk cabang jarak jauh baru mulai sekarang?
hybrid9
1
@ hybrid9 Jika Anda menggunakan git fetch, git akan mengunduh referensi dari repositori jarak jauh default yang telah ditentukan di .git/config: biasanya itu akan dipanggil origin, jadi kedua perintah itu setara, tetapi konfigurasi spesifik Anda mungkin berbeda karena beberapa alasan. Tidak, Anda tidak perlu memberikan git fetchuntuk setiap cabang, karena (secara default) semua cabang diambil .
Marco Leogrande
1
@ hybrid9 git pullsetara dengan git fetch+ git merge(atau git rebasejika Anda telah mengubah default), jadi Anda dapat tetap menggunakan git pullseperti biasa, dan cabang jarak jauh baru akan muncul dengan sendirinya.
Marco Leogrande
1
Saya awalnya menjalankan git pull tetapi saya tidak pernah melihat cabang jarak jauh baru yang benar-benar membuat saya bingung. Hanya sampai saya menjalankan git fetch origin. Saya menghargai waktu dalam menjawab pertanyaan saya.
hybrid9
2
@ hybrid Saya memiliki masalah yang sama. git ls-remote gerritrepo:projectmenunjukkan cabang jarak jauh baru tetapi git branch -atidak ... Saya harus membuat klon lain dan baru kemudian cabang baru akan muncul
Vikram
79

Periksa apakah .git/configmengandung

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master

Jika demikian, ubah menjadi mengatakan

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*

Maka Anda harus bisa menggunakannya:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'
Jesse Glick
sumber
12
Ini terjadi pada saya setelah klon dangkal awal.
ArkTekniK
Sempurna!!! Terima kasih banyak! Itu terjadi pada saya ketika menginstal keran Homebrew kustom dengan perintah brew tap user/repo: salinan lokal dari repo yang dikloning oleh brewmemiliki pengaturan yang Anda sebutkan dan tidak mungkin untuk melihat dan menggunakan cabang lain yang saya miliki di repo saya. Terima kasih lagi! :) +1!
rmbianchi
3
Perintah berikut dapat digunakan sebagai pengganti mengedit file .git / config secara manual . git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"dan kemudian git fetch originuntuk mendapatkan semua cabang asal .
dotnetCarpenter
ini bagus!
madz
47

Jawaban paling sederhana adalah:

git fetch origin <branch_name>

Jacek Dziurdzikowski
sumber
2
Secara harfiah ini adalah SATU-SATUNYA hal yang berhasil untuk saya.
Theodore R. Smith
3
Itu tidak berhasil untuk saya. Saya mendapatkan kesalahan ini:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri
3
ya itu berhasil untuk saya juga, setelah checkout git ini bekerja dengan baik !!
whoami
30

Melakukan pembaruan jarak jauh git juga akan memperbarui daftar cabang yang tersedia dari repositori jarak jauh.

Jika Anda menggunakan TortoiseGit, mulai dari versi 1.8.3.0, Anda bisa melakukan "Git -> Sync" dan akan ada tombol "Pembaruan Jarak Jauh" di kiri bawah jendela yang muncul. Klik itu. Maka Anda harus dapat melakukan "Git -> Switch / Checkout" dan memiliki cabang jarak jauh baru muncul di dropdown cabang yang dapat Anda pilih.

metaforge
sumber
18
git remote updateadalah cara lama untuk melakukan ini, perintah pilihan yang lebih baru adalah git fetch.
Dalam versi saya TortoiseGit (2.8.0.0) tombol di kiri bawah memiliki beberapa opsi di bawah panah, dan itu mengingat apa yang Anda pilih sebelumnya. Artinya, tombol mungkin tidak bertuliskan "Pembaruan Jarak Jauh". Jika Anda belum pernah menggunakannya sebelumnya akan muncul tulisan "Tarik". Jadi klik pada panah dan Anda akan melihat "Pembaruan Jarak Jauh" dalam daftar opsi.
Michael Hinds
13

Katakanlah kita sedang mencari rilis / 1.0.5

Ketika git fetch -allsedang tidak bekerja dan bahwa Anda tidak dapat melihat cabang terpencil dan git branch -rtidak menunjukkan cabang tertentu ini.

1. Cetak semua referensi dari jarak jauh (cabang, tag, ...):

git ls-remote origin Harus menunjukkan cabang jarak jauh yang Anda cari.

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

Cabang baru 'rilis / 1.0.5' muncul di keluaran.

2. Paksa mengambil cabang jarak jauh:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

Sekarang Anda juga memiliki ref secara lokal, Anda checkout (atau apa pun) cabang ini.

Pekerjaan selesai!

jpmottin.dll
sumber
1
Anda adalah penyelamat hidup :)
Chakri
# 2 adalah apa yang saya cari. Terima kasih!
Matius
4

Kedengarannya sepele, tetapi masalah saya adalah saya tidak berada dalam proyek yang tepat. Pastikan Anda berada dalam proyek yang Anda harapkan; jika tidak, Anda tidak akan bisa menurunkan cabang yang benar.

BlackHatSamurai
sumber
Ups! Bagus!
Marc
2

Saya menggunakan kekerasan dan melepas remote lalu menambahkannya

git remote rm <remote>
git remote add <url or ssh>
Bebek karet
sumber
1

Apa yang akhirnya berhasil untuk saya adalah menambahkan nama repositori jarak jauh ke git fetchperintah, seperti ini:

git fetch core

Sekarang Anda dapat melihat semuanya seperti ini:

git branch --all
Serj Sagan
sumber
0

Anda dapat melakukan checkout cabang jarak jauh / n git fetch && git checkout remotebranch

thao vu
sumber