Git: Salva-vidas

Cuide do seu repositório

Git é uma ferramenta muito poderosa. Um oceano de possibilidades. E com grandes poderes surgem grandes responsabilidades. Cuidado para não se afogar!

Neste post venho lhes contar algumas dicas interessantes para que sua experiência com Git sejam o mais tranquila possível.

O Git funciona como o terminal Linux. O comando que você der ele executa. Apesar disso algumas precauções são tomadas pelo próprio Git para que os danos sejam minimizados caso algo saia errado. Algumas vezes, no entanto, um pouquinho de precaução precisa vir de você, como é o caso abaixo.

Amor e ódio: reset e stash

Quando for brincar com coisa séria, por exemplo o comando reset, tenha em mente que há ações que não poderá voltar atrás, especialmente se utilizar reset –hard!

Modificações que não estão presentes em um commit podem ser perdidas facilmente ao utilizar o comando reset.

Ele destrói o índice e com a opção –hard ele também destrói as mudanças não adicionadas.

Por isso, ao utilizar o reset, eu sempre realizo um stash antes.

$ git stash

O comando stash gera dois commits: um com o índice e outro com as alterações não adicionadas. Ele também gera uma referência para eles, que pode ser utilizada para a restauração das mudanças.

Isso já me salvou de muitas dores de cabeça. E esta técnica eu aprendi da pior maneira possível…

Você pode ver a lista de stash, pode restaurar um stash específico ou pode apagá-lo.

O importante é que os commits com os dados não descartáveis são gerados e, se num futuro próximo você perceber que não são tão descartáveis assim, será possível voltar atrás.

Commits no Git são baratos e não requerem comunicação alguma com servidores remotos, e portanto não há motivo para não criá-los.

Apaguei o branch/stash

Mas e se eu apaguei um branch ou um stash, como poderei recuperar algo se apaguei a referência?

Haa mas o Git é esperto! Ele mantém uma lista de referências a parte, que pode ser obtida com o comando reflog. Este comando junto com o stash serão os seus salvadores!

$ git reflog

Agra você pode ver tudo o que aconteceu com as suas referências. Commit, branche, tag, stash, reset, rebase… Tudo isso fica ali registrado junto com as devidas hashes dos commits.

GC é o Perigo!

Coleta de lixo ou GC é  muito importante no Git, pois ela elimina os arquivos que não possuem mais referências e portanto não podem mais ser alcançados.

Porém após realizar a coleta de lixo os dados presentes no reflog não poderão ser restaurados. Portanto não a execute continuamente ou sem ter certeza que o passado já não mais importa.

GC é algo importante e por isso é executado automaticamente pelo Git, removendo arquivos sem referência com uma certa idade.

Concluindo

Espero que estas linhas ajudem pessoas a não perderem seu tempo ou trabalho, pois o git reset –hard não perdoa! (Calma, você ainda pode clonar seu HD e utilizar uma ferramenta de recuperação de dados…)

Curta e compartilhe! Espalhe a palavra! Deixe um comentário se tiver mais alguma sugestão salva-vidas.

Uma frase para se refletir: Se com um sistema de controle de versão já é possível ferrar com seu código-fonte, imagine sem ele!

 

Djones

Deixe uma resposta