17. Removendo um commit de um branch
Metas
- Para aprender a deletar os commits mais recentes do branch
Revert
é um comando poderoso da seção anterior que permite cancelar quaisquer commits para o repositório. No entanto, tanto os commits originais quanto os cancelados são vistos no histórico do branch (ao usar o comando git log
).
Muitas vezes, depois que um commit é feito, percebemos que foi um erro. Seria bom ter um comando desfazer que permite que os commits incorretos sejam imediatamente excluídos. Este comando evitaria o aparecimento de um ou mais commits indesejados no histórico git log
.
01 O comando reset
Já usamos o comando reset
para combinar a zona de buffer e o commit selecionado (o commit HEAD foi usado na lição anterior).
Quando uma referência de confirmação é fornecida (ou seja, um branch, hash ou nome de tag), o reset
irá …
- Sobrescrever o branch atual para que aponte para o commit correto
- Opcionalmente, redefinirá a zona de buffer para que esteja em conformidade com o commit especificado
- Opcionalmente, redefina o diretório de trabalho para que corresponda ao commit especificado
02 Verifique nosso histórico
Vamos fazer uma verificação rápida de nosso histórico de commits .
Executar:
git hist
Resultado:
Vemos que os dois últimos commits neste branch são “Ops “e” Reverter Ops “. Vamos removê-los com o comando reset
.
03 Marque este branch primeiro
Vamos marcar o último commit com tag, so you can find it after removing a commit(s).
Executar:
git tag oops
04 Redefinir o commit para Ops anterior
Em No log de histórico acima, o commit marcado como “v1” está antes dos commits “Oops” e “Reverter Oops”. Vamos redefinir a ramificação até esse ponto. Como o branch tem uma tag, podemos usar o nome da tag no comando reset (se não tiver uma tag, podemos usar o valor hash).
Executar:
git reset --hard v1git hist
Resultado:
Nosso branch master está apontando para o commit v1 e os commits “Reverter Oops” e “Oops” não existem mais no branch. O parâmetro --hard
faz com que o diretório de trabalho reflita o novo cabeçalho do branch.
05 Nada nunca se perde
O que aconteceu com os commits errados? Eles ainda estão no repositório. Na verdade, ainda podemos nos referir a eles. No início da lição, criamos a tag “oops” para o commit cancelado. Vamos dar uma olhada em todos os commits.
Executar:
git hist --all
Resultado:
Podemos ver que os commits errados não sumiram. Eles não estão mais listados no branch master, mas ainda permanecem no repositório. Eles ainda estariam no repositório se não os marcássemos, mas poderíamos referenciá-los apenas por seus nomes hash. Os commits não referenciados permanecem no repositório até que o software de coleta de lixo seja executado pelo sistema.
06 Perigos de reinicialização
Reinicializações em branches locais geralmente são inofensivas. As consequências de qualquer “acidente” podem ser revertidas usando o commit apropriado.
No entanto, outros usuários que compartilham o branch podem ser confundidos se o branch for compartilhado em repositórios remotos.