Qual é a diferença entre the HEAD
e master
in 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?
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 master
ramo, pressione para isso.
Aqui está um exemplo visual:
Em seu próprio repositório, você pode verificar para onde HEAD
está apontando, executando o seguinte:
$ git symbolic-ref HEAD
refs/heads/master
No entanto, descobrir para onde remotes/origin/HEAD
está 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 exemplogit init
).Você pode excluir o
master
ramo (por exemplogit branch -D master
). Você não pode excluir oHEAD
ponteiro.fonte
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?checkout
comando é equivalente a alternar ramificações em outros sistemas SCM comuns.HEAD
realmente é 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
e empurrará o seu ramo '
B
' muda para 'origin/B
'.Se você estiver no seu
master
ramo, o git pressionará paraorigin/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
HEAD
designará a ramificação padrão para esse controle remoto.Veja a
git remote set-head
página de manual :fonte