Quando você executa git branch xxx
, o Git somente cria a nova ramificação, mas na verdade não muda para ela - a árvore de trabalho não é modificada de forma alguma. (Observe que o novo branch terá exatamente os mesmos arquivos e histórico que o antigo.)
Quando você executa git checkout xxx
para alternar ramificações, os arquivos da nova ramificação são extraídos dos " banco de dados de objetos ", que é o arquivo mantido sob .git/objects/
que contém originais compactados de todos os arquivos em cada confirmação. (Isso também é onde os próprios commits são armazenados.)
Os arquivos pertencentes à ramificação antiga, mas ausentes da nova, são simplesmente excluídos (porque já existem no armazenamento de objetos, portanto, o Git pode apenas extraí-los novamente se você voltar).
Quando alguns arquivos são idênticos entre as ramificações, git checkout
não os toca (nenhuma exclusão / nova extração). Dessa forma, suas alterações não confirmadas podem permanecer nos checkouts.