O que está checkout
no git?
Eu sei que uma vez que você faz checkout
para um determinado ramo, os HEAD
pontos para esse ramo. Mas o que isto realmente significa? Isso significa que posso trabalhar nesse ramo? Se sim, então, sem fazer check-out de um branch, não consigo trabalhar nele?
Além disso, o que remote checkout
significa? Como isso é útil?
git
git-checkout
Daehaai
fonte
fonte
Respostas:
Como você notou,
HEAD
é um rótulo indicando onde você está na árvore de commits. Ele se move com você quando você muda de um commit para outro.git checkout <commit>
é o mecanismo básico para mover-se na árvore de commits, movendo seu focus (HEAD
) para o commit especificado.A confirmação pode ser especificado por qualquer um de uma série de maneiras, cometer hash nome de filial, nome tag, a sintaxe relativa (
HEAD^
,HEAD~1
, etc.) e assim por diante. Muitas vezes é útil considerar um checkout para alterar branches, e há algumas opções que funcionam a partir dessa perspectiva, mas todas fazem referência a commits.Para fazer check-out, um commit tem alguns efeitos colaterais além da movimentação
HEAD
.-b
opção, um novo branch será criado com base no commit atual e então tornado ativo.--track
opção o branch com check-out pode ser informado de um branch remoto--orphan
opção, um novo branch é criado (como com-b
), mas não será baseado em nenhum commit existente.Existem mais algumas opções, que você pode ler na página de manual do git checkout , todas elas giram em torno da movimentação de um commit para outro - apenas variando o efeito que o movimento tem além de mover
HEAD
.fonte
git checkout <commit> <path>
não muda ramos.git checkout <path>
.Deixe-me explicar alguns casos de uso de checkout com arquivo, pasta e branches para que possa ser útil no entendimento.
Digamos que temos uma pasta chamada
dev
eindex.html
também Tudo é rastreado e o diretório de trabalho está limpo.Se eu acidentalmente mudar o nome do arquivo
index.html
e quiser desfazê-lo, simplesmente irei usá-git checkout index.html
lo para recuperar o estado do arquivo do repositório atualmente selecionado.Agora se eu fiz alguma alteração na
dev
pasta e quero recuperar isso. Eu posso usar,git checkout dev
mas e se já houver um branch nomeado emdev
vez de fazer check-out dessa pasta, ele puxará para baixo esse branch. Para evitar isso, prefiro fazergit checkout -- dev
.Agora aqui o traço duplo vazio representa o branch atual e pede ao git a pasta
dev
do branch atualmente selecionado.Da mesma forma, se eu fizer
git checkout alpha dev
isso, puxarei a pasta dev da ramificação alfa.Esta resposta é para sua primeira pergunta 'git checkout realmente significa'.
fonte
"Fazer check-out" significa que você pega qualquer commit do repositório e recria o estado do arquivo associado e da árvore de diretório no diretório de trabalho.
Quando você faz check-out de um commit que não é um branch head (por exemplo
git checkout HEAD~2
), você está em uma chamada cabeça separada . Você pode criar commits aqui, mas assim que mudar para um branch diferente, esses commits não serão recuperáveis por um nome de branch e podem até mesmo ser removidos pelo coletor de lixo depois de algum tempo.fonte