git отказывается загружать в текущую ветку - PullRequest
55 голосов
/ 10 февраля 2010

Я установил удаленный репозиторий и могу вносить в него новые изменения, но не могу получить его, я всегда получаю (довольно загадочное) сообщение об ошибке:

fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
fatal: The remote end hung up unexpectedly

Что это значит? Что я должен сделать, чтобы включить выборку?

(Обратите внимание, что это удаленное хранилище используется только как резервное хранилище, поэтому оно должно быть в значительной степени точной копией моего локального хранилища. Я действительно не могу понять, почему я могу нажать на него, но не извлечь из него .. .)

Мой конфиг выглядит так:

[remote "origin"]
    url = ssh://blablablah
    fetch = +refs/*:refs/*
    mirror = true

Ответы [ 7 ]

48 голосов
/ 06 октября 2013

В случае, если кто-то найдет это, потому что он определенно хочет извлечь в текущую ветку, вы можете использовать флаг --update-head-ok. От документов :

-u
--update-голова-ок
По умолчанию git fetch отказывается обновлять заголовок, соответствующий текущей ветке. Этот флаг отключает проверку. Это чисто для внутреннего использования git pull для связи с git fetch, и , если вы не реализуете свой собственный фарфор, вы не должны его использовать.

В некоторых случаях мы хотим реализовать наши собственные фарфоровые команды, например, автоматизацию и инструменты.

31 голосов
/ 10 февраля 2010

То, что вы пытаетесь сделать, это получить ветку, над которой вы работаете. То есть вы являетесь в основной ветке и пытаетесь обновить его. Это невозможно. Чаще всего обновляют ветки remotes/*, а затем извлекают их в свои локальные. То, что вы хотите, возможно,

git remote add otherrepo thehost:/the/path.git

Это установит хранилище для извлечения в remotes/otherrepo/*. git fetch otherrepo должен сделать свое дело. Кроме того, вы можете вручную отредактировать свой .git/config и установить для пульта fetch что-то вроде refs/heads/*:refs/remotes/otherrepo/*.

5 голосов
/ 13 апреля 2017

Также это должно работать, если вы находитесь в master ветви и хотите получить последнюю версию, попробуйте это

git pull origin master

1 голос
/ 14 сентября 2011

У меня была эта проблема, когда я бездумно клонировал репозиторий, а не извлекал его, так что оба репозитория были мастерами. Если вы не работали с удаленным репозиторием, вы можете исправить положение с помощью основных команд git следующим образом: (1) удалить удаленный репозиторий, (2) скопировать локальный репозиторий туда, где был удаленный, (3) удалить локальный, а затем (4) настройте локальный репозиторий, используя

git init; git fetch $REMOTE_GIT_REPOSITORY_URL  

Тогда git pull и git push будут делать правильные вещи. Преимущество отказа от git remote, согласно более эффективному и принципиальному ответу Михаэля, заключается в том, что вам не нужно думать о семантике отслеживания ветвей.

0 голосов
/ 25 февраля 2019

неустранимо: отказ от загрузки в текущую ветку ссылок / заголовков / BRANCHNAME не-пустого хранилища

Я создал ветвь BRANCHNAME локально, затем выполнил команду " git fetch upstream pull / ID / head: BRANCHNAME " и получил неустранимый: отказ от загрузки в текущие ссылки / заголовки / BRANCHNAME репозитория non-bare

Затем я удалил ветвь и снова вызвал тот же cmd, что это нормально.

На самом деле я проверял ветку запроса на получение.

0 голосов
/ 08 сентября 2017

Вы действительно вводите команды Git в командной строке или запускаете исполняемый файл Git из собственного кода?
Если вы запускаете его из кода, уверены ли вы, что Git пытается извлечь его в правильный локальный каталог?

Есть два возможных способа сделать это:

  1. Используйте опции, предоставляемые вашим языком программирования, чтобы установить правильный рабочий каталог перед выполнением Git
    ( C # пример , потому что это то, что я использую)

  2. Всегда передавать параметр -C в Git для указания каталога с локальным репо.


У меня есть проект, где я вызываю исполняемый файл Git из кода C #, и я получил то же сообщение об ошибке, что и в вопросе, когда случайно забыл установить -C parameter.

0 голосов
/ 11 апреля 2015

У меня такая же проблема. Сначала я пытаюсь получить с помощью этого

git fetch [remote_name] [branch_name] 

У меня была та же проблема, о которой вы упоминали. После этого я попробовал эту простую команду.

git pull [remote_name] [branch_name]

Примечание извлечет и объединит изменения. Если вы используете терминал, то откройте файл, требующий подтверждения сообщения. С этим сообщением вы отправите последний коммит. Попробуйте эту команду, и, наконец, вы сможете нажать на запрос.

git push [remote_name] [branch_name_local] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...