TL; DR: Eu tenho um ramo "rastreado" que não consigo puxar.
Então, aqui estou eu no "bucket-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
Gostaria de extrair alterações do meu controle remoto:
$ 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.
Hmm, estranho, eu pensei que já tinha adicionado "bucket-4" como um ramo de rastreamento. Vamos ver:
$ 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)
De fato, o bucket-4 é marcado como "rastreado", mas de alguma forma está configurado para push, mas não pull.
Observando meu .git/config
arquivo, vejo que tenho entradas "remotas" e "mescladas" para a maioria das minhas ramificações, mas não para o bucket-4. Como é considerado "rastreado" sem isso?
[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
Vejo que a solução provável aqui é adicionar remote/merge
entradas para o bucket-4 no meu arquivo de configuração. Mas como é considerado "rastreado" sem isso? O bucket-4 foi criado localmente e enviado ao servidor a partir deste repositório, então suspeito que, de alguma forma, não configurei o rastreamento corretamente para essa ramificação.
Existe alguma configuração que eu possa adicionar para que todas as filiais locais rastreiem seus controles remotos corretamente no futuro?
Respostas:
Diz
bucket-4 pushes to bucket-4
apenas porque o padrão ao enviar um ramo é enviá-lo para outro com um nome correspondente no controle remoto. (Observe que esse ainda é o padrão, mesmo que a filial local esteja rastreando uma filial de rastreamento remoto e a filial de rastreamento remoto corresponda a uma filial com um nome diferente no repositório remoto.)A maneira mais simples para configurar a associação entre o seu
bucket-4
ebucket-4
noorigin
é ter certeza de que a próxima vez que você empurra, você faz:Como alternativa, você pode fazer:
Para responder diretamente a algumas de suas perguntas:
Nesse caso, não está - não está rastreando a ramificação de rastreamento remoto em nenhum sentido, se não houver
branch.bucket-4.merge
oubranch.bucket-4.remote
na sua configuração do git. A saída degit remote show origin
apenas mostra onde a ramificação seria enviada por padrão.Eu não acho que existe. Quando você criou
bucket-4
localmente, como presumo que aconteceu, o ramo de rastreamento remoto não existia, portanto não pode ser configurado nesse ponto - seria um comportamento padrão muito confuso. Você só precisa se lembrar de adicionar-u
ao seu primeirogit push
dessa ramificação seu repositório upstream.Espero que isso ajude.
fonte
git branch --set-upstream
funcionou perfeitamente para mim antes de fazer o pullgit --set-upstream <branch> origin/<branch>
você recebe um erro, pois o sinalizador está obsoleto. Recomenda-se o usogit branch --track origin/<branch>
ou--set-upstream-to
como a segunda resposta sugerida. Acho que a resposta pode ser atualizada, @ MarkLongair?git branch --set-upstream <branch> origin/<branch>
foi preterido pelo menos a partir de 1.8.2.3 (minha versão).Use em
git branch --set-upstream-to=origin/<branch> <branch>
vez disso.fonte