TL; DR: У меня есть "отслеживаемая" ветка, которую я не могу тянуть.
Итак, я в «ведре-4»:
$ git branch -v
bucket-1 410f7b5 * gh-53 * gh-48 * "Share App"
bucket-2 7ed70a2 * upgrade to SOLR 3.3.0
bucket-3 400ffe4 * emergency fix prod issue
* bucket-4 64c2414 Merge branch 'bucket-3' into bucket-4
master 8dc4854 [ahead 1] * gh-73
Я хочу получить изменения с моего пульта ДУ:
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.bucket-4.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "bucket-4"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Хм, странно, я думал, что уже добавил "ведро-4" как ветку отслеживания. Посмотрим:
$ git remote show origin
* remote origin
Fetch URL: git@github.com:abcd/main.git
Push URL: git@github.com:abcd/main.git
HEAD branch (remote HEAD is ambiguous, may be one of the following):
bucket-3
master
Remote branches:
bucket-1 tracked
bucket-2 tracked
bucket-3 tracked
bucket-4 tracked
master tracked
Local branches configured for 'git pull':
bucket-1 merges with remote bucket-1
bucket-2 merges with remote bucket-2
bucket-3 merges with remote bucket-3
master merges with remote master
Local refs configured for 'git push':
bucket-1 pushes to bucket-1 (up to date)
bucket-2 pushes to bucket-2 (up to date)
bucket-3 pushes to bucket-3 (up to date)
bucket-4 pushes to bucket-4 (local out of date)
master pushes to master (fast-forwardable)
Действительно, bucket-4 отмечен как "отслеживаемый", но каким-то образом он настроен на толкание, но не на тягу.
Глядя на свой .git/config
файл, я вижу, что у меня есть записи «удаленный» и «слияние» для большинства моих веток, но не для ведра-4. Как это вообще считается "отслеживаемым" без этого?
[remote "origin"]
url = git@github.com:abcd/main.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "rel-2011-07-07"]
remote = origin
merge = refs/heads/rel-2011-07-07
[branch "bucket-1"]
remote = origin
merge = refs/heads/bucket-1
[branch "bucket-2"]
remote = origin
merge = refs/heads/bucket-2
[branch]
autosetupmerge = true
[branch "bucket-3"]
remote = origin
merge = refs/heads/bucket-3
Я вижу, что вероятным решением здесь является добавление remote/merge
записей для bucket-4 в мой файл конфигурации. Но как это без этого считается "отслеживаемым"? bucket-4 был создан локально, а затем отправлен на сервер из этого репо, поэтому я подозреваю, что каким-то образом я неправильно настроил отслеживание для этой ветки.
Могу ли я добавить какую-то конфигурацию, чтобы все локальные ветки правильно отслеживали свои пульты в будущем?
Ответы:
Он говорит
bucket-4 pushes to bucket-4
просто потому, что по умолчанию при отправке ветки на удаленную ветку отправляется ветка с совпадающим именем. (Обратите внимание, что это по-прежнему значение по умолчанию, даже если локальная ветвь отслеживает ветку удаленного отслеживания, а ветка удаленного отслеживания соответствует ветке с другим именем в удаленном репозитории.)Самый простой способ установить связь между your
bucket-4
иbucket-4
inorigin
- убедиться, что в следующий раз, когда вы нажимаете, вы делаете:В качестве альтернативы вы можете:
Чтобы ответить прямо на пару ваших вопросов:
В данном случае это не так - он не отслеживает ветку удаленного отслеживания ни в каком смысле, если ее нет
branch.bucket-4.merge
илиbranch.bucket-4.remote
в вашей конфигурации git. Выводgit remote show origin
просто показывает вам, куда ветвь будет помещена по умолчанию.Я не думаю, что есть. Когда вы создавали
bucket-4
локально, как я предполагаю, ветка удаленного отслеживания не существовала, поэтому ее нельзя настроить на этом этапе - это было бы очень запутанным поведением по умолчанию. Вам просто нужно не забыть добавить-u
свою первуюgit push
ветку в исходный репозиторий.Надеюсь, это поможет.
источник
git branch --set-upstream
у меня отлично работал, прежде чем делать тягуgit --set-upstream <branch> origin/<branch>
вы получаете сообщение об ошибке, так как флаг устарел. Рекомендуется использоватьgit branch --track origin/<branch>
или--set-upstream-to
как предложенный второй ответ. Думаю, ответ можно обновить, @MarkLongair?git branch --set-upstream <branch> origin/<branch>
устарел как минимум с версии 1.8.2.3 (моя версия).git branch --set-upstream-to=origin/<branch> <branch>
Вместо этого используйте .источник