Подтвердить что ты не робот

Git отказ от вхождения в текущую ветку

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

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
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

git pull origin мастер

Ответ 4

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

git init; git fetch $REMOTE_GIT_REPOSITORY_URL  

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

Ответ 5

У меня та же проблема. Сначала я пытаюсь воспользоваться этим

git fetch [remote_name] [branch_name] 

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

git pull [remote_name] [branch_name]

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

git push [remote_name] [branch_name_local] 

Ответ 6

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

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

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

  • Всегда передавайте параметр -C на Git, чтобы указать каталог с локальным репо.


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

Ответ 7

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

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

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

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