Git - Guia para apressados
Escrevi este texto para ajudar um Time, em que trabalhei, durante a adoção do Git. Procuro ser bem direto sobre o uso da ferramenta. A idéia é descrever o cenário de uso e o comando que atende ao cenário.
Apresentar-se para o Git
Depois de instalado, o Git espera que você configure seu usuário e email.
$ git config --global user.name "Antonio Carlos da Graça Mota Durão de Souza"
$ git config --global user.email "acdesouza@example.com"
- O que fazer se eu esqueci de me apresentar, e acabei de commitar?
$ git commit --amend --reset-author
Criar um repositório novo
$ git init
Controlando as modificações no repositório
Preparando o commit
O git tem o conceito de stage, que é o buffer onde se prepara o commit. Sendo assim, para gravar uma versão dos arquivos, devemos adicioná-los ao stage.
$ git add caminho_para_arquivo
Caso deseje remover um arquivo, para informar esta remoção, ao git use:
$ git rm caminho_para_arquivo
Ops! Adicionei quem não devia
Para remover um arquivo do stage, use:
$ git reset caminho_para_o_arquivo
Desistindo de uma modificação, não versionada
Caso não tenha feito um commit, você ainda pode desfazer as modificações feitas desde o último commit.
Reverter as modificações feitas em um arquivo já versionado
$ git checkout path_para_o_arquivo
Reverter todas as modificações feitas em todos os arquivo já versionados
$ git checkout .
Remover arquivos criados, que não estejam versionados, e não serão mais necessários.
$ git clean -df
Versionar as modificações, adicionadas ao stage - Commit
$ git commit -m "Mensagem de commit"
Fiz besteira no último commit! /o\
Existem alguns casos em que é interessante desfazer um commit. Mas, lembre-se de só desfazer commits que não foram publicados para o Time. Neste caso, faça um novo commit revertendo as mudanças.
Nunca faça isso para commits que já foram publicados por git push.
Para desfazer, o último commit e voltar as alterações para o stage:
$ git reset HEAD~1 --soft
Para desfazer, de vez, o último commit:
Observe que esse comando irá mudar o histórico de commits apagando o último commit, como se este nunca tivesse sido feito.
$ git reset HEAD~1 --hard
Apaguei um commit que não devia /o\
Então, queria apagar um commit, daí usei o “git reset –hard HEAD~1”
Só que apaguei o commit errado. Como eu recupero um commit apagado?
- Liste as últimas ações no repositório local, o que inclui o commit apagado.
$ git reflog
85a1f7d HEAD@{0}: reset: moving to HEAD~1
ade91cd HEAD@{1}: commit: Escreve alguma coisa em a.txt <--- É esse que quero recuperar
85a1f7d HEAD@{2}: commit (initial): Cria o primeiro arquivo
- Encontre o commit perdido, pela mensagem de commit. E, copiar o sha1 que o representa, é a primeira coluna na lista do reflog.
- Para recuperar o commit perdido, será necessário fazer um cherry-pick
$ git cherry-pick ade91cd
$ git reflog
d2da560 HEAD@{0}: cherry-pick: Escreve alguma coisa em a.txt
85a1f7d HEAD@{1}: reset: moving to HEAD~1
ade91cd HEAD@{2}: commit: Escreve alguma coisa em a.txt
85a1f7d HEAD@{3}: commit (initial): Cria o primeiro arquivo
Pronto! Commit recuperado.
Compartilhando as modificações com o Time
Neste caso, o Time decidiu que teriam um repositório comum, para compartilhar o código.
Para enviar suas modificações para esse local remoto, use:
git push
E, é isso. Esses são os fluxos básicos pelos quais um usuário deverá passar ao usar o git no dia-dia.