Quais são os conceitos git de HEAD, mestre, origem?


193

Enquanto estou aprendendo sobre o git, continuo encontrando os termos HEAD, mestre, origem e não sei ao certo quais são as diferenças. Se bem entendi, HEAD é sempre igual à última revisão? E se sim, essa é a revisão mais recente de todo o repositório ou de uma ramificação ou marca específica? Isso é tão confuso. Eu li muitos tutoriais sobre isso e coisas como ramificação / fusão, mas ainda não consigo entender.

Respostas:


227

Eu recomendo o livro "Pro Git", de Scott Chacon . Reserve um tempo e realmente leia-o, enquanto explora um repositório Git real como você.

CABEÇA : a confirmação atual em que seu repo está ativado. Na maioria das vezes, HEADaponta para a confirmação mais recente em sua ramificação atual, mas esse não precisa ser o caso. HEADrealmente significa apenas "qual é o meu repo atualmente apontando".

No caso em que o commit HEADse refere não é a ponta de nenhum ramo, isso é chamado de "cabeça desanexada".

master : o nome do ramo padrão que o git cria para você ao criar um repo. Na maioria dos casos, "mestre" significa "o ramo principal". A maioria das lojas exige que todos dominem, e o master é considerado a visão definitiva do repo. Mas também é comum que as ramificações de liberação sejam feitas como master para liberação. Seu repositório local tem sua própria filial principal, que quase sempre segue o mestre de um repositório remoto.

origem : o nome padrão que o git atribui ao seu repositório remoto principal. Sua caixa tem seu próprio repositório e você provavelmente envia para um repositório remoto que você e todos os seus colegas enviam. Esse repo remoto é quase sempre chamado origem, mas não precisa ser.

HEADé uma noção oficial no git. HEADsempre tem um significado bem definido. mastere originsão nomes comuns geralmente usados ​​no git, mas eles não precisam ser.


O que você quer dizer com "HEAD realmente significa apenas" qual é o meu repo atualmente apontando para "." Se houver várias ramificações em um repositório, qual é o HEAD de acordo com você? se houver três ramificações (junto com o mestre) e uma confirmação de necessidade for feita no ramo A, o HEAD ainda poderá estar no commit do 'mestre'. Então, qual é a revisão que o repositório está apontando agora?
OK999 5/05

2
não está claro o que você quer dizer com repo (local ou remoto). Em geral, sua resposta usa expressões, sem explicá-las antes.

Acabei de fazer um clone em um diretório paralelo para comparar meu diretório de trabalho com a dica do repositório remoto. É assim que todas as respostas git são boas.

@JingHe Você leu o livro inteiro? Isso realmente vale a pena? Quero dizer, nós estamos falando de um pânico mais de 500 páginas lidas, que parece um pouco demais para mim ...
Max

1
Para verificar se compreendo a lógica, posso chamar uma ramificação no controle remoto como featureA e, quando pressiono para essa ramificação, digito "git push origin featureA". Também posso extrair o mesmo do controle remoto dizendo "git pull origin featureA", fazer alterações. E a cabeça está se referindo apenas à cópia local. @ OK999 Acredito que o HEAD esteja apontando para o ramo em que você fez check-out no momento no local. Se a confirmação foi feita no branchA, mas atualmente você está no branchB, o HEAD está apontando para o branchB. Você deve mover o HEAD para branchA de volta antes de fazer um commit específico.
TLee 12/12/19

43

HEADnão é a revisão mais recente, é a revisão atual . Normalmente, é a revisão mais recente do ramo atual, mas não precisa ser.

master é um nome comumente atribuído ao ramo principal, mas pode ser chamado de qualquer outra coisa (ou não pode haver ramo principal).

originé um nome comumente atribuído ao controle remoto principal. remote é outro repositório do qual você pode extrair e enviar. Geralmente está em algum servidor, como o github.


1
Você pode dar um exemplo de quando o HEAD é atual, mas não o mais recente? Eu nunca vi isso antes. Ou você quer dizer que pode não ser a mais recente porque sua filial está atrás da filial remota que está rastreando?
Matt Greer

12
@ MattGreer: Se você verificar algo mais antigo (como uma tag como git checkout v1.1), seu HEAD mudará para o commit dessa tag. Pode não ser a confirmação mais recente.
Greg Hewgill

8

Embora isso não responda diretamente à pergunta, há um ótimo livro disponível gratuitamente, que o ajudará a aprender o básico chamado ProGit . Se você preferir a versão em madeira morta a uma coleção de bits, poderá comprá-la na Amazon .


9
A pergunta não pediu um livro! Ainda não está claro para mim, por que eu precisaria de um livro para o git, quando não preciso de um para o C ++.

11
Você só pensar que você não precisa de um livro para C ++;)
Piotr Perak
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.