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

Вы попросили меня потянуть, не сказав мне, с какой веткой вы хотите слиться с

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: [email protected]:abcd/main.git
  Push  URL: [email protected]: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 отмечен как "отслеживаемый", но каким-то образом он настроен на push, но не тянет.

Посмотрев на мой файл .git/config, я вижу, что у меня есть записи "remote" и "merge" для большинства моих ветвей, но не для bucket-4. Как это даже считается "отслеживаться" без этого?

[remote "origin"]
    url = [email protected]: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 был создан локально, а затем перенаправлен на сервер из этого репо, поэтому я подозреваю, что каким-то образом я не настроил правильное отслеживание этой ветки.

Есть ли какая-то конфигурация, которую я могу добавить, чтобы все локальные ветки правильно отслеживали свои пульты в будущем?

4b9b3361

Ответ 1

Он говорит bucket-4 pushes to bucket-4 только потому, что по умолчанию при нажатии ветки нужно нажать его на одно с соответствующим именем на пульте дистанционного управления. (Обратите внимание, что это по-прежнему по умолчанию, даже если локальная ветвь отслеживает ветку удаленного отслеживания, а ветка удаленного отслеживания соответствует ветке с другим именем в удаленном репозитории.)

Самый простой способ настроить связь между вашими bucket-4 и bucket-4 в origin заключается в том, чтобы убедиться, что при следующем нажатии вы выполните:

git push -u origin bucket-4

В качестве альтернативы вы можете:

git branch --set-upstream bucket-4 origin/bucket-4

Чтобы ответить на пару вопросов напрямую:

Как это даже считается "отслеживанным" без этого?

В этом случае нет - он не отслеживает ветвь удаленного слежения в каком-либо смысле, если там нет branch.bucket-4.merge или branch.bucket-4.remote в конфигурации git. Вывод из git remote show origin показывает вам, куда по умолчанию будет нажата ветка.

Есть ли какая-то конфигурация, которую я могу добавить, чтобы все локальные ветки правильно отслеживали свои пульты в будущем?

Я не думаю, что есть. Когда вы создавали локальный каталог bucket-4, как я предполагал, ветвь удаленного отслеживания не существовала, поэтому ее нельзя настроить в этой точке - это было бы очень запутанным поведением по умолчанию. Вам просто нужно запомнить, чтобы добавить -u к вашему первому git push этой ветки в свой восходящий репозиторий.

Я надеюсь на какую-то помощь.

Ответ 2

git branch --set-upstream <branch> origin/<branch> был устарел, по крайней мере, от версии 1.8.2.3 (моя версия).

Используйте git branch --set-upstream-to=origin/<branch> <branch> вместо этого.