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.

user779159
fonte

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.

Matt Greer
fonte
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.

svick
fonte
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 .

Piotr Perak
fonte
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