Konfigurasi Anda menentukan untuk bergabung dengan <nama cabang> dari jarak jauh, tetapi tidak ada referensi yang diambil.?


202

Saya mendapatkan kesalahan ini untuk menarik:

Konfigurasi Anda menentukan untuk bergabung dengan ref 'ref / head / feature / Sprint4 / ABC-123-Branch' dari remote, tetapi tidak ada referensi yang diambil.

Kesalahan ini tidak terjadi pada cabang lainnya.
Hal khusus tentang cabang ini adalah bahwa ia dibuat dari komit sebelumnya dari cabang lain.

File konfigurasi saya terlihat seperti:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch

Bisakah Anda membagikan perintah yang Anda gunakan untuk melakukan penggabungan?
dchayka

1
Masalah ini dapat terjadi ketika cabang jarak jauh telah dihapus. Periksa apakah benar-benar ada.
Benny Neugebauer

4
Pembaca masa depan: Jika Anda tahu cabang jauh ada, periksa apakah Anda mengabaikan kasus atau tidak. Saya telah mengatur cabang lokal untuk melacak cabang jarak jauh, tetapi mengetik nama remote di semua huruf kecil. Baru saja mengkonfigurasi ulang lokal untuk melacak origin / BranchName alih-alih origin / branchname
Jerreck

Saya baru saja mengalami kesalahan ini dan masalahnya jauh lebih sederhana daripada jawaban di bawah ini, saya telah kehilangan koneksi VPN saya. Jadi ini juga kesalahan yang Anda dapatkan jika git tidak dapat mengakses server asal remote.
Ben Thurley

Server git saya keluar. Itu penyebabnya.
dellasavia

Jawaban:


147

Apa artinya ini?

Hulu Anda — kendali jarak jauh yang Anda hubungi origin— tidak lagi memiliki, atau mungkin tidak pernah (tidak mungkin untuk mengetahui dari informasi ini sendirian) cabang bernamafeature/Sprint4/ABC-123-Branch . Ada satu alasan yang sangat umum untuk itu: seseorang (mungkin bukan Anda, atau Anda akan ingat) menghapus cabang di repositori Git lainnya.

Apa yang harus dilakukan

Ini tergantung pada apa yang Anda inginkan . Lihat bagian diskusi di bawah ini. Kamu bisa:

  • buat atau buat ulang cabang pada remote, atau
  • hapus cabang lokal Anda, atau
  • hal lain yang dapat Anda pikirkan.

Diskusi

Anda harus menjalankan git pull(jika Anda menjalankan git mergeAnda akan mendapatkan pesan kesalahan yang berbeda, atau tidak ada pesan kesalahan sama sekali).

Ketika Anda menjalankan git fetch, Git Anda menghubungi Git lain, berdasarkan pada urlbaris di bawah [remote "origin"]bagian konfigurasi Anda. Git itu menjalankan perintah ( upload-pack) yang, antara lain, mengirimkan Git Anda daftar semua cabang. Anda dapat menggunakannya git ls-remoteuntuk melihat cara kerjanya (coba, ini mendidik). Ini adalah cuplikan dari apa yang saya dapatkan ketika menjalankan ini di repositori Git untuk gitdirinya sendiri:

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

The refs/heads/entri daftar semua cabang yang ada pada remote, 1 bersama dengan yang sesuai komit ID (untuk refs/tags/entri ID mungkin menunjukkan tag objek daripada komit).

Git Anda mengambil setiap nama cabang ini dan mengubahnya sesuai dengan fetchbaris di remotebagian yang sama . Dalam hal ini, Git Anda menggantikan refs/heads/masterdengan refs/remotes/origin/master, misalnya. Git Anda melakukan ini dengan setiap nama cabang yang muncul.

Itu juga mencatat nama asli dalam file khusus FETCH_HEAD(Anda dapat melihat file ini jika Anda mengintip ke .gitdirektori Anda sendiri ). File ini menyimpan nama dan ID yang diambil.

The git pullperintah dimaksudkan sebagai cut kenyamanan singkat: itu berjalan git fetchpada tepat remote, dan kemudian git merge(atau, jika diinstruksikan, git rebase) dengan apa pun argumen yang diperlukan untuk menggabungkan (atau rebase) seperti yang diarahkan oleh [branch ...]bagian. Dalam hal ini, [branch "feature/Sprint4/ABC-123-Branch"]bagian Anda mengatakan untuk mengambil origin, lalu bergabung dengan ID apa pun yang ditemukan di bawah nama refs/heads/feature/Sprint4/ABC-123-Branch.

Karena tidak ada yang ditemukan dengan nama itu, git pullmengeluh dan berhenti.

Jika Anda menjalankan ini sebagai dua langkah terpisah, git fetchdan kemudian git merge(atau git rebase), Git Anda akan melihat remotes/origin/cabang-cabang pelacakan jarak jauh yang di- cache Anda untuk melihat apa yang akan digabungkan atau dirangkum ulang. Jika ada cabang seperti itu pada satu waktu, Anda mungkin masih memiliki cabang pelacakan jarak jauh. Dalam hal ini Anda tidak akan mendapatkan pesan kesalahan. Jika tidak pernah ada cabang seperti itu, atau jika Anda telah menjalankan git fetchdengan --prune(yang menghapus cabang pelacakan jarak jauh yang mati), sehingga Anda tidak memiliki cabang pelacakan jarak jauh yang sesuai, Anda akan mendapatkan keluhan, tetapi origin/feature/Sprint4/ABC-123-Branchsebaliknya akan merujuk .

Dalam kedua kasus , kita dapat menyimpulkan bahwa feature/Sprint4/ABC-123-Branchtidak ada sekarang pada remote yang bernama origin.

Itu mungkin memang ada pada satu waktu, dan Anda mungkin membuat cabang lokal Anda dari cabang pelacakan jarak jauh. Jika demikian, Anda mungkin masih memiliki cabang pelacak jarak jauh. Anda dapat menyelidiki untuk melihat siapa yang menghapus cabang dari jarak jauh, dan mengapa, atau Anda mungkin mendorong sesuatu untuk membuatnya kembali, atau menghapus cabang pelacakan jarak jauh dan / atau cabang lokal Anda.


1 Yah, semua itu akan mengakui , setidaknya. Tetapi kecuali mereka secara khusus menyembunyikan beberapa referensi, daftar mencakup semuanya.


Terima kasih telah menjelaskan apa yang sebenarnya dilakukan perintah git pull. Saya dapat memperbaiki masalah saya dengan menjalankan git fetch dan kemudian bergabung.
Fizch

11
Untuk menghapus referensi cabang jarak jauh yang tidak ada di repositori lokal Anda, gunakangit remote prune origin
Yoav

1
@ Ben-Uri: ya, atau, jalankan git fetch --prune origin, atau atur fetch.pruneke truedalam konfigurasi Anda (ketiganya dimaksudkan untuk melakukan hal yang sama, meskipun dalam beberapa versi Git beberapa di antaranya tidak cukup dapat diandalkan).
torek

1
Anda harus git checkout <your remote branch>dan semua menjadi baik (dalam beberapa kasus).
Alexander Shtang

2
@ JonathanBenn: Anda dapat menggunakan git branch --set-upstream-to=origin/master masteruntuk mengubah pengaturan hulu untuk lokal Anda master. Hapus-dan- git checkout masterbuat kembali memiliki efek samping (dengan asumsi Anda menggunakan gaya DWIM untuk membuatnya), dengan efek samping tambahan memaksa Anda masteruntuk mencocokkan Anda origin/master.
torek

71

Ini juga dapat terjadi jika Anda / seseorang mengganti nama cabang. Jadi ikuti langkah-langkah ini (jika Anda tahu nama cabang diganti namanya) Dengan asumsi nama cabang sebelumnya sama wrong-branch-namedan seseorang mengganti namanya menjadi correct-branch-nameJadi.

git checkout correct-branch-name

git pull (Anda akan melihat ini "Konfigurasi Anda menentukan ..")

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (Anda tidak akan mendapatkan pesan sebelumnya)


1
Bahkan tidak perlu git pushdan tidak akan berfungsi jika cabang saat ini berada di belakang remote-nya. git pull origin correct-branch-namecukup.
Pierre

1
Perintah untuk mengatur upstream salah di atas. Lakukan git pull setelah, --unset-upstream operasi, pada output dari tarikan Anda dapat melihat kesalahan, dengan perintah untuk mengatur upstream, seperti di bawah ini, git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi

Bekerja dengan baik untuk saya setelah menghapus beberapa file besar dari repo saya dan perlu mendorong kembali ke repo baru yang baru saya buat
larrytech

40

Periksa apakah cabang jarak jauh Anda tersedia untuk ditarik. Saya memiliki masalah yang sama, akhirnya menyadari bahwa cabang jauh telah dihapus oleh seseorang.


4
Itu sama bagi saya!
Aerin

3
Setelah permintaan tarik, merger (yaitu orang yang melakukan penggabungan) memiliki opsi untuk menghapus cabang yang digabungkan ke cabang target. Jika Anda mencoba menarik pada titik itu Anda akan mendapatkan kesalahan ini.
Artokun

itu benar :)
Malhaar Punjabi

7

Bagi saya itu adalah masalah sensitivitas kasus. Cabang lokal saya adalah Version_feature2 bukan Version_Feature2. Saya memeriksa ulang cabang saya menggunakan casing yang benar dan kemudian git pull bekerja.


2
Ini ternyata juga masalah saya. Tidak perlu jelas dengan nama cabang yang cukup panjang / rumit.
Håkon K. Olafsen

6

Kesalahan ini juga dapat diterima ketika nama cabang asal memiliki beberapa masalah kasus.

Sebagai contoh: cabang asal adalah team1-Teamdan cabang lokal telah checkout sebagai team1-team. Kemudian, ini Tmasuk -Teamdan tdalam -teamdapat menyebabkan kesalahan tersebut. Ini terjadi dalam kasus saya. Jadi, dengan mengubah nama lokal dengan nama cabang asal, kesalahan diselesaikan.


6

Dalam kasus saya, saya hanya kurang melakukan komit awal pada cabang terpencil, jadi cabang lokal tidak menemukan apa pun untuk menarik dan itu memberikan pesan kesalahan itu.

Aku melakukannya:

git commit -m 'first commit' // on remote branch
git pull // on local branch

4

Saya mendapat kesalahan serupa ketika penyebab sebenarnya adalah disk saya penuh. Setelah menghapus beberapa file, git pullmulai berfungsi seperti yang saya harapkan.


4

Saya terus mengalami masalah ini. Dalam kasus saya, komentar @ Jerreck tentang perbedaan kasus dalam nama cabang adalah penyebab kesalahan ini. Beberapa alat Windows tidak mengetahui sensitivitas kasus.

Untuk mematikan sensitivitas huruf dalam git, jalankan perintah ini:

git config --global core.ignorecase true

Perhatikan bahwa ini akan berdampak lebih dari nama cabang. Misalnya, jika Anda memiliki "Foo.h" dan "foo.h" di direktori yang sama (bukan ide bagus saat membuat perangkat lunak untuk Windows) maka saya curiga Anda tidak dapat mematikan sensitivitas huruf besar-kecil.


2

Periksa apakah seseorang menghapus cabang di jarak jauh.


1

Dalam kasus saya, saya telah menghapus cabang asli dari mana cabang saya saat ini berasal. Jadi dalam file .git / config saya punya:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

simil2.0.5 telah dihapus. Saya menggantinya dengan nama cabang yang sama:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

dan itu berhasil


1

Anda dapat dengan mudah menautkan cabang lokal Anda dengan yang jauh dengan menjalankan:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull

0

Bagi saya ini terjadi karena saya menggabungkan dev cabang menjadi master menggunakan antarmuka web dan kemudian mencoba menyinkronkan / menarik menggunakan VSCode yang terbuka di cabang dev. (Anehnya bahwa saya tidak dapat mengubah menjadi master tanpa mendapatkan kesalahan ini.)

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

Masuk akal bahwa tidak menemukannya ref / kepala / dev - bagi saya itu lebih mudah untuk hanya menghapus folder lokal dan mengkloning lagi.


0

Saya baru saja mendapatkan kesalahan ini ketika melakukan "git pull" ketika disk saya penuh. Menciptakan ruang dan semuanya mulai bekerja dengan baik lagi.


0

Anda dapat mengedit ~/.gitconfigfile di folder rumah Anda. Di sinilah semua pengaturan - global disimpan.

Atau, gunakan git config --global --unset-all remote.origin.urldan setelah dijalankan git fetchdengan url repositori.


0

Saya menghadapi masalah yang sama di mana cabang saya saat ini adalah dev dan saya sedang memeriksa ke cabang MR dan melakukan git pull sesudahnya. Solusi mudah yang saya ambil adalah saya membuat folder baru untuk MR Branch dan melakukan git pull di sana diikuti oleh git clone.

Jadi pada dasarnya saya memelihara folder yang berbeda untuk mendorong kode ke cabang yang berbeda.


0

Saya baru saja mendapatkan kesalahan yang sama, ketika saya tidak menggunakan case yang benar. Saya dapat memeriksa 'integrasi'. Git mengatakan kepada saya untuk melakukan git pullpembaruan cabang saya. Saya melakukan itu, tetapi menerima kesalahan yang disebutkan. Nama cabang yang benar adalah 'Integrasi' dengan huruf kapital 'I'. Ketika saya memeriksa cabang itu dan menariknya, ia bekerja tanpa masalah.


-2

Jika tarikan lain berfungsi, berarti internet Anda tidak terhubung.


Sejumlah downvotes namun ini adalah penyebab saya menerima kesalahan ini. Saya memiliki Internet tetapi telah kehilangan VPN ke server git saya. Setelah menyambung kembali ke VPN tarikan bekerja dengan baik.
Ben Thurley
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.