h1. Dicas GIT
Essa página tem o objetivo de reunir diversas dicas para usar o GIT.
h2. Configurar GIT - Forma Global, ou seja, qualquer projeto que use o git terá as configurações abaixo
# cadastra nome do usuario
git config --global user.name “nome”
# cadastra e-mail do usuario
git config --global user.email “email@email.com”
# cadastra vscode como editor padrão
git config --global core.editor code
# para saber qual valor está salvo:
git config user.name | user.email | core.editor
# para saber todos valores salvos:
git config --list
h2. Configurar GIT - Forma local, ou seja, somente o projeto em que esta trabalhando, terá as configurações abaixo
# cadastra nome do usuario
git config --local user.name “nome”
# cadastra e-mail do usuario
git config --local user.email “email@email.com”
# cadastra vscode como editor padrão
git config --local core.editor code
# para saber qual valor está salvo:
git config user.name | user.email | core.editor
# para saber todos valores salvos:
git config --list --local
h2. Inicializar repositório
# inicializa repositório no git e cria pasta .git com arquivos de confgiguração)
git init
h2. Ciclo de vida | status dos arquivos
**Untracked** - Não marcado, arquivo que acabou de ser adicionado no repositório mas ainda não foi visto(não foi add) pelo git.
Unmodified - Já foi adicionado no GIT mas não sofreu nenhuma alteração.
Modified - Arquivo já add que sofreu alteração.
Staged - área onde vai ser criado a versão, arquivo prontos para serem enviados pelo commit criando hash. E os arquivos voltam pro estado unmodified.
h2. Ligando repositório local a um remoto (GIT / GITLAB / GITHUB)
# Ligando repositório local ao remoto.
git remote add origin git@github.com:nomeDoUsuario/nomeDaPasta.git
# Fazer o primeiro envio dos arquivos para repositório remoto.
git push -u origin master
# Após isso somente usar Git push ou se tiver mais de um branch usar
git push origin master # ou nome de outro branch
h2. Clonar repositório
# clona repositório para pasta local na maquina.
git clone endereçoRepositório(html/ssh) nomeDaPasta
h2. Criar branch
# cria novo branch onde o HEAD vai ficar posicionado.
git checkout -b nomeBranch
# muda para o branch selecionado.
git checkout nomeBranch
# mostra todos os branchs do repositório.
git branch
# deleta branch selecionado no repositório local, e também os commits que estãoapontados nele.
git branch -D nomeBranch
h2. Unir branchs - Diferença entre Merge e Rebase
**Merge** - cria um commit extra, fazendo uma junção dos ultimos commits de branchs diferentes no branch principal.
Rebase - Pega tudo que tiver no branch separado e bota no incio da fila(fast foward). Aplica todas as mudanças para frente da fila.
h2. Merge e rebase na prática
Se você está atualizando o seu branch com coisas vindas do master, use o comando abaixo para evitar sujar o gráfico com mensagens de merge que não são necessárias.
git pull origin master --rebase
Se você está jogando sua mudança para o master, use comando abaixo pois isso vai sinalizar onde a mudança entrou e também não vai precisar forçar nenhum push
git merge nome_da_branch
h2. GitIgnore
É um arquivo no repositório e dentro desse arquivo é descrito padrões com os tipos de arquivos que o git vai ignorar.
Exemplo para ignorar todos arquivos .json: *.json
Consultar - https://github.com/github/gitignore
Se o arquivo já tinha adicionado alguma vez, primeiro você precisa removê-lo do cache.
git rm --cached caminho/arquivo.extensão
h2. Comandos úteis
# reporta como está repositório no momento, mostra status dos arquivos e em qual branch está e etc..
git status
# adiciona arquivo no repositório para ser administrado pelo git
git add arquivo
# cria uma imagem(snapshot) com todos arquivos tendo uma versão.
git commit -m “mensagem sobre o commit” # Cada commit gera uma hash(código único) para identificação dessa versão.
# commitar arquivo já adicionado anteriormente sem precisar add depois da modificação, commita direto.
git commit -am “mensagem sobre o commit”
# mostra hash commit, autor, data e msg do commit.
git log
# lista os logs em linhas de forma mais limpa..
git log --oneline
# mostra infos adicionais como branchs, merge e etc.
git log --decorate
# lista todos commits desse autor.
git log --author=”nomeAutor”
# lista em forma grafica o que está acontecendo.
git log --graph
# lista em ordem alfabetica autores, quantos commits eles fizeram e quais foram.
git shortlog
# lista apenas quantidade de commits e autor.
git shortlog -sn
# mostra alterações feitas no arquivo commitado, comparado com sua versão anterior.
git show [codigoHash]
# consegue ver alterações feitas no arquivo comparado com a versão anterior salva antes de adicionar para commitar.
git diff
# lista somente nomes dos arquivos modificados.
git diff --name-only
# lista os remotes.
git remote
# lista os nomes e endereços.
git remote -v
h2. Git Stash
Comando responsável por guardar modificações(arquivos que estão no modo modified) que ainda não foram commitadas num arquivo que possa acessar depois quando necessário.
# salva o estado dos arquivos alterados para o WIP.
git stash save "mensagem"
# lista todos arquivos que foram alterados para WIP.
git stash list
# aplica as modificações de um stash salvo.
git stash apply {numero-do-stash}
# remove um stash salvo.
git stash drop {numero-do-stash}
# aplica e remove o ultimo stash salvo
git stash pop
# elimina todos arquivos que estiverem no stash.
git stash clear
h2. Cria atalhos (ALIAS) para os comandos (sistema unix)
git config --global alias.atalho comandoNormal
h2. Criar tags
As tags servem para definir versões do que está sendo feito, para separar partes de um projeto com vários commits. Ficam na aba releases.
# cria tags com descrição.
git tag -a 1.0.0 -m “Mensagem da tag”
# para subir para repositório remoto todas tags criadas ate o momento.
git push origin master –tags
# apaga tag no repositório local
git tag -D nomeDaTag
h2. Comandos para desfazer
# retorna estado do arquivo de modified para antes da edição = unmodified.
git checkout nomeArquivo
# volta para modified arquivo que estava em staged.
git reset HEAD nomeArquivo
# cancela commit e retorna arquivo pra staged pronto pra ser commitado de novo
git reset --soft codigoHash
# cancela commit e retorna arquivo pra modified.
git reset --mixed codigoHash
# cancela e apaga tudo até a ultima versão salvo do arquivo.
git reset --hard codigoHash
h2. Revert
Tipo ctrl+Z, volta um passo anterior mas mantem no histórico o commit anterior com alteração. Já no reset ele deletaria o commit.
git revert numeroHash # reverte alteração feita, mas mantém commit da alteração no histórico.
h2. Apagando Tags e Branchs no repositório remoto
git push origin :nomeDaBranch ou :nomeDaTag --delete
h2. Ignorar localmente arquivos proibidos no commit
- Edite o arquivo .git/info/exclude, essa pasta .git fica dentro da pasta raiz do projeto, colocar o caminho para o arquivo a ser ignorado localmente, conforme imagem abaixo:
!image-01.png!
Em seguida, rodar o comando: git update-index –skip-worktree. Exemplo:
git update-index –skip-worktree .gitignore