init
- Estrutura:
git init - Descrição: Todas mudanças realizadas versionadas com o git ficam na pasta
.gitna raiz do projeto. Para ter esse diretório - e consequentemente utilizar o git - das duas uma, ou clona um objeto (baixa um existente) comgit clone <endereco>ou inicializa o git na pasta cominit - Flags:
git init --bareinicia servidor remote
clone
- Estrutura:
git clone <url ou path> - Descrição: Copia e cola projeto de acordo com a url
- Flags:
git clone --single-branch --branch <branch> <url>clona somente uma branch
- Observações:
git clone <url ou path> <diretorio>cria projeto com nome de pasta diferente do original
status
- Estrutura:
git status - Descrição: Verifica a situação dos arquivos do projeto deve-se utilizar.
add
- Estrutura:
git add <file> <file> ...<file>é um arquivo ou diretório, caso seja usado.adiciona tudo do atual diretório
- Descrição: Somente arquivos staged podem ser commitados, e para isso é preciso escolher untrackeds ou not stageds. Com
addé feita a troca de estado para staged. - Flags:
git add -Aadiciona todos arquivos
- Observações:
git reset <file>troca de staged para untracked ou not staged
commit
- Estrutura:
git commit - Descrição: O commit é o responsável por gravar as alterações dos arquivos stageados no projeto. É pelo histórico de commits que é possível retroceder até determinada versão do projeto. Os principais características que todo commit possui é seu hash (identificador), data, autor e mensagem. Com o comando é aberto um editor de texto para escrever a mensagem.
- Flags:
git commit -m "<mensagem>"cria commit sem abrir o editor de texto
- Observações:
- Dicas para uma mensagem de commit:
- Ser clara para tornar fácil o entendimento do histórico do projeto.
- Possuir um título descritivo de até 50 caracteres. Se necessário especificar mais, deve-se pular uma linha e descrever parágrafos de até 70 caracteres (caso prefira listar tópicos, utilize hifens).
- Utilizar verbos no imperativo sobre o que aquele commit afeta no código. Exemplo: ao invés de escrever “Eu adicionei teste X” ou “Adicionando teste X”, use “Adiciona teste X”.
- Vale ressaltar que podem existir convenções para mensagens de commits. Uma famosa é do site conventionalcommits.org, cujo foi adaptada para o framework angular.
- Dicas para uma mensagem de commit:
remote
- Estrutura:
git remote <comando><comando>comandos relacionados ao remotegit remote add <nome remoto> <url>adiciona<nome remoto>, sendo normalmente origin ou upstream
- Descrição: O Github hospeda projetos git online. Quando um projeto possui seu código salvo como no Github, ele possui um remote. Ao criar um projeto o git não sabe identificar aonde ele será “guardado”. Um projeto pode ter inúmeros remotes e comumente o seu principal é chamado de origin e o original de um fork upstream.
- Flags:
git remote -vexibe nomes dos remotes e suas urls
push
- Estrutura:
git push <remote> <branch><remoto>nome do remote, normalmente origin ou upstream<branch>branch do remote
- Descrição: Envia o código juntamente com seu histórico para o remote.
log
- Estrutura:
git log - Descrição: Lista os commits, podendo ser usado abaixo:
- Flags:
git log --pretty=onelineexibe cada commit em uma linha
merge
- Estrutura:
git merge <branch nova> - Descrição: Mescla duas branches. Caso nenhum commit tenha sido criado na branch de origem durante os commits da nova branch, o git vai juntar todos os commits diretamente (sem um novo commit com separação e referência da branch). Essa situação é uma funcionalidade do git chamada fast-forward.
- Flags:
git merge <branch> --no-ffjunta branch atual com<branch>sem a opção de fast-forward
Prós e contras de fast-forward pelo criador do gitflow
checkout
- Estrutura:
git checkout <referência><referência>branch, hash do commit ou arquivo/folder precedido de--
- Descrição:
- Troca de branch
- Acessa commit (transformando-o em uma branch temporária -ideal para inspecionar estado do projeto naquele ponto).
- Descarta modificações de um arquivo não commitado
- se
<referência>for usada comogit checkout <remote-branch>:<new-branch>é possível criar branch local a partir do remote (veja fetch para obter branches remotas).
- Flags:
git checkout -b <nova branch>cria<nova branch>e troca para a esta.git checkout -- <arquivo ou folder>desfaz modificações não commitadas do arquivo/folder. Igual aogit restore <arquivo ou folder>. Para o folder atual, tantocheckout --quantorestore, se for usado.é escolhido o diretório atual.
reset
- Estrutura:
git reset <referência><referência>hash do commit, a posição relativa ao HEAD (sendo um anteriorHEAD~1, doisHEAD~2e etc) ou um arquivo para remover da área de staged.
- Descrição: Retorna o histórico ou altera a área de staged. Todos arquivos dos commits apagados permanecem (como modified ou untracked).
- Flags:
git reset --hard HEAD~1desfaz todas alterações dos arquivos, não deixando modifieds ou untrackeds
bisect
- Estrutura:
git bisect <comando><comando>comandos relacionados ao bisectgit bisect startinicia a procura pelo commitgit bisect badespecifica que o commit atual é ruimgit bisect good <hash-commit>especifica o commit bom, para o git procurar entre as duas especificações o responsávelgit bisect resetencerra o monitoramento
- Descrição: Encontra o commit que adicionaram código com bug, substitui o uso do
git checkout <hash-commit>por agilizar o processo de troca de commit. Funciona como uma sequencia interativa de troca de comunicação entre o algoritmo do git e o comportamento que está sendo analisado.é quase um quente ou frio - Fluxo:
git bisect startinicia a procura pelo commitgit bisect badespecifica que o commit atual é ruimgit bisect good <hash-commit>especifica o commit bom, para o git procurar entre as duas especificações o responsável- caso não saiba o commit bom, faça
git checkout <hash-commit>até encontrá-lo, e quando achar usegit bisect good
- caso não saiba o commit bom, faça
- o git vai te trocar de commit a cada
git bisect goodougit bisect badaté sobrar 1, portanto cabe a você monitorar - no commit que o git constatar ser o culpado será exibido em tela como “o primeiro commit ruim”
git bisect resetpara encerrar o monitoramento
com
git logé possível saber em que commit está para aprovar ou não (é a HEAD)
fetch
- Estrutura:
git fetch - Descrição: Atualiza as referências das branches dos remotes
- Observações:
git fetch <remote> <branch>retorna as referências especificas de uma branch de um remote- Após trazer a referência é possível ir para essa branch com
git checkout <branch>
- Após trazer a referência é possível ir para essa branch com
pull
- Estrutura:
git pull <remoto> <branch><remoto>nome do remote, normalmente origin ou upstream<branch>branch do<remoto>
- Descrição: Atualiza projeto de acordo com a branch do remoto.
stash
- Estrutura:
git stash <comando><comando>comandos relacionados ao stashgit stash savesalva modificaçõesgit stash save "mensagem de descrição"salva modificações com descriçãogit stash listlista stashesgit stash showexibe arquivos modificados do ultimo stashgit stash show -pexibe diffs do ultimo stashgit stash clearlimpa área de stashgit stash applyaplica ultimo stashgit stash popaplica ultimo stash e o apaga
<branch>branch do<remoto>
- Descrição: Salva modificações sem commitá-las.