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?
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?
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 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 exemplo git init
).
Você pode excluir o master
ramo (por exemplo git branch -D master
). Você não pode excluir o HEAD
ponteiro.
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
git push origin
e empurrará o seu ramo ' B
' muda para ' origin/B
'.
Se você estiver no seu master
ramo, 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 HEAD
designará a ramificação padrão para esse controle remoto.
Veja a git remote set-head
pá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 paraorigin
estiver definida comomaster
,origin
poderá ser especificada onde quer que você especifique normalmenteorigin/master
.