Sempre que tiver uma dúvida sobre um comando, lembre-se de olhar a documentação usando:
git help <comando>
A documentação é sempre a melhor forma de aprender a usar a ferramenta.
Existem times que adotam padrões específicos para a escrita de seus commits, o que foge do escopo deste curso, mas fica aqui a referência para alguns desses padrões:
Existem padrões de como você deve nomear a versão do seu software. Cada projeto pode adotar o seu próprio e seguem aqui alguns deles:
Hooks são gatilhos que o Git executa antes ou depois de certos eventos, por
exemplo, o evento PRE-COMMIT é executado um pouco antes de cada git commit
que
você executar. Dessa forma, você pode adicionar funcionalidades customizadas no
seu processo de versionamento. Um uso muito comum disso é usar os hooks para
automaticamente reformatar seu código antes de todo commit.
Os hooks na verdade são arquivos de script que são encontrados em .git/hooks
.git/hooks/
applypatch-msg.sample
commit-msg.sample
fsmonitor-watchman.sample
post-update.sample
pre-applypatch.sample
pre-commit.sample
prepare-commit-msg.sample
pre-push.sample
pre-rebase.sample
pre-receive.sample
update.sample
Em algum momento você vai querer saber quem raios escreveu essa porcaria de código e o Git rapidamente refrescará a sua memória e mostrará que foi você mesmo quem escreveu isso... no mês passado.
Comando para ver quem, quando e em qual commit foram feitas alterações.
git blame visao-geral.md
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 1) # Visão geral do Git
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 2)
c732a318 (marceloll 2020-08-05 15:04:39 -0300 3) 1. Configurar Git (user.name, user.email)
a23a48b2 (marcel0ll 2020-08-05 16:23:39 -0300 4) 1. Clonar repositório [email protected]:marcel0ll/curso-git.git
a23a48b2 (marcel0ll 2020-08-05 16:23:39 -0300 5) 1. Modificar arquivo README.md
a23a48b2 (marcel0ll 2020-08-05 16:23:39 -0300 6) 1. Adicionar README ao stage
a23a48b2 (marcel0ll 2020-08-05 16:23:39 -0300 7) 1. Criar commit
a23a48b2 (marcel0ll 2020-08-05 16:23:39 -0300 8) 1. Enviar modificação ao Github
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 9)
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 10) ---
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 11)
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 12) [Anterior](motivacao.md)
2379cc16 (marceloll 2020-08-05 14:20:43 -0300 13) [Pŕoximo](configurando-o-git.md)
O reflog é similar ao log, mas em vez de listar commits ele lista as mudanças feitas nas suas referências.
Comando que lista modificações nas suas referências
git reflog -10
3ee69bc HEAD@{0}: commit: Preencha seção saber-mais.md
ca790df HEAD@{1}: commit: Mude ordem de tag e branch
cb014ca HEAD@{2}: reset: moving to HEAD
cb014ca HEAD@{3}: commit: Mude nome do arquivo para exercicio-1
abcc793 HEAD@{4}: commit: Atualize fluxos de trabalho com Git
3b1a7fa HEAD@{5}: reset: moving to HEAD
3b1a7fa HEAD@{6}: commit: Adicione passo para mudança de diretório do projeto clonado
e4b31b9 HEAD@{7}: commit: Remova arquivo chunks.md
7593f38 HEAD@{8}: commit: Mude exercicio de lista ordenada para lista de pontos
a23a48b HEAD@{9}: commit: Simplifique visao geral
O stash é um salva-vidas para quando você tem algumas modificações no seu repositório e quer trocar de branchs sem ter que criar um novo commit. Então você as joga para o stash, faz o que precisa fazer sem maiores conflitos e depois você as desempilha do seu stash.
Tome cuidado ao usá-lo. Às vezes colocamos modificações no stash para nunca mais lembrarmos delas.
Empilha modificações no stash
Desempilha modificações do stash
Cherry-pick é um comando muito pontual. Ele é como se fosse um rebase de um commit só para qualquer lugar do seu histórico. Você literalmente copia um commit de um lugar e o encaixa em outro commit.
Recria commit em outra posição do histórico
O bisect auxilia você a pesquisar de forma binária uma linha de trabalho entre 2 commits. O Git dá um checkout para certos commits intermediários perguntando se era essa a versão que você estava procurando até que você o encontre.
Executa uma busca binária interativa à procura de algum commit específico.