Melhor ser explicado em um exemplo: estou no branch 0,58 do repositório e é assim que eu puxo:
git pull origin 0.58
Quando eu chamo "git pull", recebo:
ip238:openlierox az$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.0.58.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.0.58.remote = <nickname>
branch.0.58.merge = <remote-ref>
remote.<nickname>.url = <url>
remote.<nickname>.fetch = <refspec>
See git-config(1) for details.
Parece que provavelmente esqueci alguma opção (--track?) Quando verifiquei esse branch. De qualquer forma, eu configurei isso agora:
git config branch.0.58.merge 0.58
git config branch.0.58.remote origin
E isso parece funcionar. Então, apenas por interesse, dei uma olhada em algum outro ramo sobre essas configurações:
ip238:openlierox az$ git config branch.0.57.merge
refs/heads/0.57
ip238:openlierox az$ git config branch.0.57.remote
origin
Eu queria saber agora, há uma diferença entre "0,58" ou devo especificar "refs / heads / 0,58"?
Qual é a diferença exatamente?
heads
com um "s".Respostas:
A
ref
é qualquer coisa apontando para um commit, por exemplo, branches (heads), tags e branches remotos. Você deve ver heads, remotes e tags em seu.git/refs
diretório, assumindo que você tenha todos os três tipos de refs em seu repositório.refs/heads/0.58
especifica uma ramificação chamada 0,58. Se você não especificar em qual namespace o ref está, o git irá procurar os padrões. Isso torna o uso de apenas 0,58 concebivelmente ambíguo - você poderia ter um branch e uma tag chamada 0,58.fonte
refs/heads/
erefs/remotes/
erefs/tags/
Apenas para quem está curioso -
git show-ref
, que está disponível desde Git v1.8.2.2, mostrará todas as referências que você tem em seu repositório local.fonte
git log --decorate=full
mostrará os nomes completos das referências na históriaVeja,
branchName
precisa ser totalmente resolvido antes que o GIT possa realmente identificá-lo. O nome totalmente resolvido serárefs/heads/branchName
.git checkout branchName
Na verdade, um dos comandos mais famosos o resolve totalmente para identificar onde você deseja fazer o checkout. Observe que ele faz isso automaticamente, portanto, nunca o escrevemos totalmente por conta própria.Como isso faz? Vamos olhar aqui
Portanto, pelos 6 passos acima, ele tenta resolver o que é isso
branchName
. Portanto, nunca precisamos fornecer um branchName totalmente resolvido para ele.Olhe aqui e aqui também.
Além disso, vá em seu
.git
diretório e veja dentro daref
pasta.fonte