добавить имя удаленного + подкачки с происхождением, выдает ошибку: "git fetch origin; git merge" работает,! = "git pull" имеет ошибку -Почему / как? - PullRequest
1 голос
/ 26 сентября 2011

Я искал все выше и ниже, чтобы понять это, и я чувствую, что это просто ускользает из моих пальцев.Здесь есть похожие, но не идентичные QnAs.

Проблема:

$ git pull
Your configuration specifies to merge with the ref 'master'
from the remote, but no such ref was fetched.

В то время как git fetch ничего не дает, затем следует git merge origin, который говорит Already up-to-date., чтоЯ ожидал, что git pull работал 'правильно'.

$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "official"]
    url = git://github.com/freenet/wininstaller-official.git
    fetch = +refs/heads/*:refs/remotes/official/*
[remote "origin"]
    url = git://github.com/freenet/wininstaller-staging.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    tagopt = --tags
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "t"]
    remote = origin
    merge = refs/heads/master

$ cat .git/refs/remotes/origin/master
1a30b106723624321366f40a078c9ca4c28394ec

$ cat .git/refs/heads/master
1a30b106723624321366f40a078c9ca4c28394ec

Почему git pull выдает ошибку, в то время как git fetch / merge дает ожидаемый результат?

Справочная информация: я клонировал git repo, freenet / wininstaller-official.git, затем увидел wininstaller-staging.git и подумал: «Там, скорее всего, есть некоторые несущественные совпадения, я должен добавить« staging »в качестве удаленного к первому репо».Да, теперь мы готовим с мерзавцем!Это будет очень эффективно.

Тогда я подумал, что «лучше отследить постановку, давайте назовем этот источник, и у моего локального мастер-трека будет новый источник / мастер».Вот Это Да!Uber-elte am I!

Поэтому я переименовываю пульты, как указано выше, удаляю локальный мастер, извлекаю новый мастер, отслеживающий новое происхождение / мастер.

И git fetch; git merge, кажется, доказывает, что он работает правильно!

Но, увы, git pull ошибок нет.Горе это я.В конце концов, не такая уж супер-элита: (

TIA

1 Ответ

5 голосов
/ 26 сентября 2011

Ошибка от git pull жалуется на то, что он не может найти ветку, из которой вы сказали слить.Я подозреваю, что это потому, что вы настроили tagopts = --tags для origin, и с этой опцией git fetch не получает заголовки веток .Попробуйте удалить эту строку и снова запустить git pull.

Чтобы объяснить разницу pull / fetch-and-merge: при ручном запуске git fetch он не получает параметры --tags, поэтомуэто действительно приносит главы ветви.Таким образом, после этой точки, origin/master существует и может быть объединен с.


Возможно, стоит добавить еще одну заметку: более нормально использовать git merge origin/<branch-name>, что более явно, чем git merge origin,В этом более необычном случае git интерпретирует origin как ветвь refs/remotes/origin/HEAD - то есть текущую ветвь (или коммит) в удаленном репозитории origin в последний раз, когда вы выбирали оттуда.Вероятно, лучше придерживаться git merge origin/<branch-name>, чтобы избежать путаницы.

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