Qual é a diferença entre the HEADe masterin Git?
Eu fiz um clone de um projeto no GitHub e quero enviar minhas alterações para o controle remoto. Mas para qual deles devo empurrar?

Qual é a diferença entre the HEADe masterin Git?
Eu fiz um clone de um projeto no GitHub e quero enviar minhas alterações para o controle remoto. Mas para qual deles devo empurrar?

Respostas:
masteré uma referência ao final de um ramo. Por convenção (e por padrão), esse geralmente é o principal ramo de integração, mas não precisa ser.
HEADé realmente um tipo especial de referência que aponta para outra referência. Pode apontar para master ou não (apontará para o ramo que está atualmente com check-out). Se você sabe que deseja se comprometer com o masterramo, pressione para isso.
Aqui está um exemplo visual:

Em seu próprio repositório, você pode verificar para onde HEADestá apontando, executando o seguinte:
$ git symbolic-ref HEAD
refs/heads/master
No entanto, descobrir para onde remotes/origin/HEADestá apontando é mais complicado, pois está na máquina remota.
Há um ótimo pequeno tutorial sobre referências ao git aqui:
http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1
A resposta simples é que HEADé um ponteiro / rótulo para o commit mais recente do ramo em que você está atualmente. masteré o ramo padrão criado quando você inicializou um repositório git (por exemplo git init).
Você pode excluir o masterramo (por exemplo git branch -D master). Você não pode excluir o HEADponteiro.
HEADé um ponteiro / rótulo para o commit mais recente do ramo em que você está atualmente." Eu acho que isso é enganoso, na melhor das hipóteses. Se você efetuar o check-out de uma confirmação mais antiga, o HEAD agora é um ponteiro para essa confirmação mais antiga, não para a confirmação mais recente. Certo?
checkoutcomando é equivalente a alternar ramificações em outros sistemas SCM comuns.
HEADrealmente é o ponteiro do Git . Agradeço o seu comentário e acho que os outros também. O conteúdo da minha postagem original, juntamente com o seu comentário de acompanhamento, se complementam. Obrigado.
Simplesmente envie as alterações de sua filial atual
git push origin
e empurrará o seu ramo ' B' muda para ' origin/B'.
Se você estiver no seu masterramo, o git pressionará para origin/master.
Na verdade, ele enviará todas as alterações nas ramificações locais que possuem ramificações remotas correspondentes origin. É controlado pela configuração push.default .
Veja também empurrando RefSpecs no livro Pro Git .
O que você está vendo é a barra lateral que representa todos os refspecs de seu repo remoto no fork Experimental GitX do projeto GitX .

O HEADdesignará a ramificação padrão para esse controle remoto.
Veja a git remote set-headpágina de manual :
Não é necessário ter uma ramificação padrão para um controle remoto, mas permite que o nome do controle remoto seja especificado no lugar de uma ramificação específica.
Por exemplo, se a ramificação padrão paraoriginestiver definida comomaster,originpoderá ser especificada onde quer que você especifique normalmenteorigin/master.