Algumas outras boas referências sobre esses tópicos:
![texto alternativo](https://i.stack.imgur.com/caci5.png)
Eu uso o índice como um ponto de verificação .
Quando estou prestes a fazer uma alteração que pode dar errado - quando quero explorar uma direção que não tenho certeza se posso seguir adiante ou mesmo se é uma boa ideia, como uma refatoração ou mudança conceitual exigente tipo de representação - eu verifico meu trabalho no índice. Se esta é a primeira alteração que fiz desde a minha última confirmação, posso usar o repositório local como um ponto de verificação, mas geralmente tenho uma alteração conceitual que estou implementando como um conjunto de pequenas etapas. Desejo verificar o ponto após cada etapa, mas salve o commit até voltar ao trabalho, código testado.
Notas:
o espaço de trabalho é a árvore de diretórios dos arquivos (de origem) que você vê e edita.
O índice é um arquivo binário único e grande, <baseOfRepo>/.git/index
que lista todos os arquivos da ramificação atual, suas somas de verificação sha1 , registros de data e hora e o nome do arquivo - não é outro diretório com uma cópia dos arquivos.
O repositório local é um diretório oculto ( .git
), incluindo um objects
diretório que contém todas as versões de cada arquivo no repositório (ramificações locais e cópias de ramificações remotas) como um arquivo compactado "blob".
Não pense nos quatro 'discos' representados na imagem acima como cópias separadas dos arquivos de recompra.
![texto alternativo](https://i.stack.imgur.com/naws3.png)
Eles são basicamente referências nomeadas para confirmações do Git. Existem dois tipos principais de referências: tags e heads.
- Tags são referências fixas que marcam um ponto específico no histórico, por exemplo, v2.6.29.
- Pelo contrário, os chefes são sempre movidos para refletir a posição atual do desenvolvimento do projeto.
![texto alternativo](https://i.stack.imgur.com/fq3ws.png)
(observação: como comentado por Timo Huovinen , essas setas não são o que as confirmações apontam, é a ordem do fluxo de trabalho , basicamente mostrando as setas como 1 -> 2 -> 3 -> 4
onde 1
está o primeiro commit e 4
o último)
Agora sabemos o que está acontecendo no projeto.
Mas, para saber o que está acontecendo aqui e agora, há uma referência especial chamada HEAD. Serve para dois propósitos principais:
- informa ao Git qual commit para obter arquivos quando você faz o checkout e
- diz ao Git onde colocar novos commit quando você faz o commit.
Quando você o executa git checkout ref
, aponta HEAD
para o árbitro que você designou e extrai arquivos dele. Quando você executa, git commit
ele cria um novo objeto de confirmação, que se torna filho do atual HEAD
. Normalmente HEAD
aponta para uma das cabeças, então tudo funciona muito bem.
![texto alternativo](https://i.stack.imgur.com/6dUTQ.png)
HEAD
é o commit na ponta da ramificação atual. Se você acabou de verificar a ramificação, ou seja, não possui arquivos modificados, seu conteúdo corresponde à árvore de trabalho. Assim que você modifica algo, ele não corresponde mais.