Ваша конфігурація вказує об'єднатись із <ім'ям гілки> з віддаленого пристрою, але такий посилання не було отримано.


203

Я отримую цю помилку для тягнення:

Ваша конфігурація вказує на об'єднання з ref 'refs / heads / feature / Sprint4 / ABC-123-Branch' з віддаленого пристрою, але жодної такої посилання не було отримано.

Ця помилка не надходить для жодної іншої галузі.
Особливістю цієї гілки є те, що вона створена з попередньої комісії іншої гілки.

Мій файл конфігурації виглядає так:

[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

Чи можете ви поділитися командою, яку ви використовуєте для злиття?
дчайка

1
Ця проблема може статися, коли віддалена гілка була видалена. Перевірити, чи дійсно там є.
Бенні Нойгебауер

4
Майбутні читачі: Якщо ви знаєте, що віддалене відділення існує, перевірте, ігноруєте ви справу чи ні. Я створив локальну гілку для відстеження віддаленої гілки, але ввів ім’я віддаленого літери всіма малими літерами. Просто довелося переналаштувати місцеве місце для відстеження походження / BranchName замість походження / ім'я гілки
Джеррек

У мене тільки була ця помилка, і проблема була набагато простішою, ніж відповіді нижче, я втратив своє VPN-з'єднання. Отже, це також помилка, яку ви отримуєте, якщо git не може отримати доступ до сервера віддаленого походження.
Бен Терлі

Мій сервер git вийшов. У цьому причина.
dellasavia

Відповіді:


150

Що це означає

У вашій верхній течії - віддаленому, до якого ви дзвоните origin- більше немає, або, можливо, ніколи не було (неможливо сказати лише з цієї інформації) відділення з назвою feature/Sprint4/ABC-123-Branch. Є одна особливо поширена причина цього: хтось (мабуть, не ти, чи ти пам’ятаєш) видалив гілку в іншому сховищі Git.

Що робити

Це залежить від того, що ви хочете . Дивіться розділ обговорення нижче. Ти можеш:

  • створити або заново створити гілку на пульті, або
  • видалити локальну філію або
  • все, що ви можете придумати.

Обговорення

Ви повинні працювати git pull(якщо ви працювали, git mergeви отримаєте інше повідомлення про помилку або взагалі не було повідомлення про помилку).

Під час запуску git fetchваш Git з’єднується з іншим Git на основі urlрядка в [remote "origin"]розділі конфігурації. Цей Git виконує команду ( upload-pack), яка, крім іншого, надсилає вашому Git список всіх гілок. Ви можете використовувати, git ls-remoteщоб побачити, як це працює (спробуйте, це навчально). Ось фрагмент того, що я отримую при запуску цього в сховищі Git для gitсебе:

$ 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]

У refs/heads/списку всіх гілок , які існують на пульті дистанційного керування записом, 1 разом з відповідною фіксацією ідентифікаторів (для refs/tags/запису ідентифікаторів можуть вказувати на об'єкти тег , а не фіксації).

Ваш Git приймає кожне з цих імен гілок та змінює його відповідно до fetchрядків (ів) у цьому ж remoteрозділі. У цьому випадку ваш Git замінює refs/heads/masterз refs/remotes/origin/master, наприклад. Ваш Git робить це з кожною назвою філії, яка трапляється.

Він також записує оригінальні імена у спеціальний файл FETCH_HEAD(ви можете побачити цей файл, якщо зазирнути у свій власний .gitкаталог). Цей файл зберігає отримані імена та ідентифікатори.

git pullКоманда призначена як зручність коротким: він працює git fetchна відповідний пульт, а потім git merge(або, якщо це передбачено, git rebase) з тим, що аргументи необхідні для об'єднання (або перебазувати) відповідно з вказівками [branch ...]розділу. У цьому випадку у вашому [branch "feature/Sprint4/ABC-123-Branch"]розділі йдеться про отримання origin, а потім злиття з будь-яким ідентифікатором, знайденим під назвою refs/heads/feature/Sprint4/ABC-123-Branch.

Оскільки під цією назвою нічого не знайдено, git pullскаржиться і зупиняється.

Якщо ви запустили це як два окремі етапи, git fetchа потім git merge(або git rebase), ваш Git перегляне ваші кешовані remotes/origin/гілки віддаленого відстеження, щоб побачити, з чим об'єднатись або перезавантажити. Якщо колись була така гілка, у вас все ще може бути відділення віддаленого відстеження. У цьому випадку ви не отримаєте повідомлення про помилку. Якщо такої гілки ніколи не було, або якщо ви працювали git fetchз --prune(яка видаляє мертві гілки віддаленого відстеження), так що у вас немає відповідної гілки віддаленого відстеження, ви отримаєте скаргу, але вона посилатиметься на неї origin/feature/Sprint4/ABC-123-Branch.

В будь-якому випадку ми можемо зробити висновок, що feature/Sprint4/ABC-123-Branchзараз немає на віддаленому імені origin.

Це, ймовірно, існувало свого часу, і ви, ймовірно, створили свою локальну гілку з відділення віддаленого відстеження. Якщо так, у вас, ймовірно, все ще є відділення дистанційного відстеження. Ви можете дослідити, щоб побачити, хто видалив гілку з віддаленого пристрою, і чому, або ви можете просто натиснути щось, щоб відновити її, або видалити відділення віддаленого відстеження та / або локальну гілку.


1 Ну, все, у чому він збирається визнати , принаймні. Але якщо вони спеціально не приховували деякі переліки, у список включено все.


Дякуємо, що пояснили, що насправді робить команда git pull. Мені вдалося виправити свою проблему, запустивши git fetch і потім об'єднавшись.
фіз

11
Щоб видалити неіснуючі посилання на віддалені відділення у вашому локальному сховищі, використовуйтеgit remote prune origin
Yoav

1
@ Бен-Урі: так, або, біг git fetch --prune origin, або набір fetch.pruneдля trueвашої конфігурації (всі три призначені , щоб зробити те ж саме, хоча і в дещо версій Git деякі з них не були достатньо надійні).
торек

1
Вам потрібно буде git checkout <your remote branch>і все буде добре (в деяких випадках).
Олександр Штанг

3
@JonathanBenn: ви можете використовувати git branch --set-upstream-to=origin/master masterдля перемикання налаштувань для поточного потоку для вашого локального master. Видалити та відтворити це як побічний ефект (якщо використовувати його git checkout masterдля створення стилю DWIM ), з додатковим побічним ефектом, щоб змусити вашу masterвідповідати вашому origin/master.
torek

72

Це також може статися, якщо ви / хтось перейменував філію. Тому виконайте ці кроки (якщо ви знаєте, що назва гілки перейменовано) Припустимо, що раніше назва гілки є такою, wrong-branch-nameі хтось перейменував її на correct-branch-nameSo.

git checkout correct-branch-name

git pull (ви побачите це "Ваша конфігурація вказує ..")

git branch --unset-upstream

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

git pull (ви не отримаєте попереднє повідомлення)


1
Це навіть не потрібно git pushі він не працюватиме, якщо поточна гілка знаходиться за її пультом. git pull origin correct-branch-nameдостатньо.
П’єр

2
Команда встановити вище за течією неправильна вище. Виконайте потяг git після, - unset-upstream операція, у висновку тягнення ви бачите помилку, за допомогою команди встановити upstream, як внизу, git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi

Для мене добре працювали, видаливши декілька великих файлів з мого репо, і мені потрібно було відтіснити нове репо, яке я щойно створив
larrytech

40

Перевірте, чи доступна ваша віддалена філія. У мене був той самий випуск, нарешті зрозумів, що віддалену гілку хтось видалив.


4
Це було те саме для мене!
Ерін

3
Після запиту на витягнення злиття (тобто особа, яка здійснила злиття) має можливість видалити гілку, яка була об'єднана в цільову гілку. Якщо ви спробуєте витягнути цю точку, ви отримаєте цю помилку.
Артокун

це правда :)
Малхаар Пенджабі

7

Для мене це було питання чутливості до справ. Моя локальна філія була Version_feature2 замість Version_Feature2. Я повторно перевірив свою гілку за допомогою правильного корпусу, а потім спрацював git.


2
Це виявилося і моєю проблемою. Це не обов'язково, очевидно, при досить довгих / складних назвах гілок.
Хокон К. Олафсен

6

Ця помилка також може бути отримана, коли в імені відділення походження виникає певна проблема.

Наприклад: гілка походження є, team1-Teamа місцева філія була зареєстрована як team1-team. Тоді це Tв -Teamі tв -teamможе призвести до такої помилки. Це сталося в моєму випадку. Отже, змінивши локальну назву з назвою гілки походження, помилка була вирішена.


6

У моєму випадку мені просто не вистачало початкової фіксації на віддаленій гілці, тому місцева гілка не знайшла нічого, щоб витягнути, і вона давала це повідомлення про помилку.

Я зробила:

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

4

Я отримав подібну помилку, коли фактичною причиною було те, що мій диск був заповнений. Після видалення деяких файлів git pullпочав працювати так, як я очікував.


4

Я продовжував стикатися з цим питанням. У моєму випадку коментар @ Jerreck про відмінності у регістрі у назвах гілок став причиною цієї помилки. Деякі інструменти Windows не знають про чутливість до регістру.

Щоб вимкнути чутливість регістру в git, запустіть цю команду:

git config --global core.ignorecase true

Зауважте, що це вплине більше, ніж назви філій. Наприклад, якщо у вас в одному каталозі "Foo.h" і "foo.h" (не чудова ідея при створенні програмного забезпечення для Windows), я підозрюю, що ви не можете вимкнути чутливість регістру.


2

Просто перевірте, чи хтось віддалено видалив гілку.


1

У моєму випадку я видалив оригінальну гілку, з якої походить моя поточна гілка. Отже, у файлі .git / config у мене було:

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

simil2.0.5 було видалено. Я замінив його тим же найменуванням гілки:

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

і це спрацювало


1

Ви можете легко зв’язати свою локальну філію з віддаленою, запустивши:

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

0

Для мене це сталося тому, що я об'єднав девайс гілки у майстер за допомогою веб-інтерфейсу, а потім спробував синхронізувати / витягнути за допомогою VSCode, який був відкритий на гілці Dev. (Дивно, що я не міг змінити майстер, не отримавши цю помилку.)

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

Має сенс, що не знаходити це refs / heads / dev - мені було легше просто видалити локальну папку та знову клонуватись.


0

Я щойно отримав цю помилку, коли робив "git pull", коли мій диск був заповнений. Створили трохи простору, і все знову почало працювати нормально.


0

Ви можете редагувати ~/.gitconfigфайл у домашній папці. Тут зберігаються всі - глобальні налаштування.

Або скористайтеся git config --global --unset-all remote.origin.urlі після запуску git fetchіз URL-адресом сховища.


0

Я стикався з тією ж проблемою, де моя теперішня філія була розробленою, і я перевіряв MR-відділення і після цього робив git. Просте вирішення, яке я взяв, - це те, що я створив нову папку для MR Branch і зробив там git, а потім - клоном git.

Таким чином, я в основному підтримував різні папки для переміщення коду до іншої гілки.


0

Я просто отримав ту саму помилку, коли не використав правильний випадок. Я міг перевірити "інтеграцію". Гіт сказав мені виконати, git pullщоб оновити свою гілку. Я це зробив, але отримав згадану помилку. Правильна назва філії - "Інтеграція" із великим літером "Я". Коли я перевірив цю гілку і потягнув, вона працювала без проблем.


-2

Якщо чергове витяг просто працює, це означає, що ваш Інтернет не був підключений.


Чимало голосів, але це було причиною того, що я отримав цю помилку. У мене був Інтернет, але я втратив VPN на своєму сервері git. Після підключення до VPN витяг спрацював чудово.
Бен Терлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.