Estudos sobre o Git
O que é git
O Git é um sistema de controle de revisão distribuído rápido, escalável e com um conjunto de comandos extraordinariamente ricos que fornecem operações de alto nível e acesso total aos internos.
Entender o conceito do git
Sistema de controle de revisão distribuído
Diferenças entre Git e SVN
O que é o git-flow
Criado pelo Vincent Driessen,
É um fluxo de trabalho, adotando nomenclaturas:
hotfixes
, release-branches
, develop
, feature-branches
.
Workflow :
1:branch = 1:feature
Cada alteração é feita via branch, seja HotFix/BugFix, novas funcionalides, ou até mesmo versões novas (diversas funcionalidades) tentando sempre manter a master
atualizada e mantendo ciclos de deploy constante.
Prós: Simples, Controle
Problemas: Equipes muito grandes podem gerar conflitos na master, não recomendado o projeto não possua testes automatizados e processos de deploy, pois descobrir que o merge efetuado na master está bugado vai ser triste.
GitHub-Flow
Uma versão sem simplificada do Git-Flow, onde possui um bugfix
Prós: Simples, Controle
Problemas: Equipes muito grandes podem gerar conflitos na master, e descobrir que o merge não estão tão certo assim (e já está na master)
Comandos mais utilizados no dia a dia
Efetua um clone (cria uma pasta na sua máquina com todos os arquivos que estão no servidor).
git clone https://github.com/gabrieldarezzo/estudos-git.git
Lista todos os arquivos que foram alterados.
git status
Exibe as modificações de um arquivo especifico, no caso do exemplo abaixo o README.md
git diff README.md
Envia todos os arquivos modificados para o stage.
git add .
Remove todos os arquivos que estão stage.
git reset
Efetuar o commit das alterações que estão no stage.
git commit -m"Update variable STORE_PASS in .example.env"
Envia para o repositório remoto os commits efetuados.
git push
Exibe todos os commits em ordem decrescente.
git log
Puxa toda as alterações que estão no repositório remoto.
git pull
Informa a branch atual com um (*), e lista todas que estão na sua maquina (repositório local).
git branch
Limpa/Exclui todos as alterações efetuadas nos arquivos já existentes, alterando para o estado inicial da branch atual.
git checkout .
Cria uma branch (por default a partir da master), e aponta para ela.
git checkout -b feature/delete-user
Exclui uma branch local. (Não pode estar na mesma branch no ato da exclusão)
git branch -D feature/delete-user
Exclui uma branch remota.
git push origin --delete feature/delete-user
Acessar a branch master, e efetuar o merge utilizando squash
git checkout master
git merge --squash feature/delete-user
Jogar os arquivos em uma branch temporaria
git stash
Recuperar os arquivos desta branch
git stash pop
Remover TODOS os arquivos desta branch temporaria
git stash clear
Comandos úteis que sao desconhecidos
...
O que é um Rebase
...
O que é um Revert
O comando git revert é uma operação de desfazer avançada que oferece um método seguro de desfazer alterações. Em vez de excluir ou tornar commits órfãos no histórico de commits, uma reversão vai criar um commit novo que inverte as alterações especificadas.
Como aplicar um revert em um commit especifico:
git revert dd8d6f587fa24327d5f5afd6fa8c3e604189c8d4>
Como aplicar um revert no merge efetuado:
git revert -m 1 dd8d6f587fa24327d5f5afd6fa8c3e604189c8d4>
Rebase/Revert, quais as diferenças?
...
O que é commit?
Um Commit é um pacote de alterações feitas no repositório. Uma especie de PATH que é efetuada no código. Exemplo de um commit:
O que é uma branch / Ramificação ?
Ramificação no git é um ponteiro para as alterações feitas nos arquivos do projeto.
É útil em situações nas quais você deseja adicionar um novo recurso ou corrigir um erro, gerando uma nova ramificação garantindo que o código instável (inacabado) não seja mesclado nos arquivos do projeto principal. Depois de concluir a atualização dos códigos da ramificação, você pode mesclar (merge
) a ramificação com a principal, geralmente chamada de master
.
Porque é necessário fazer o merge de uma branch no master?
Caso você tenha optador por criar uma branch.
E você densevolveu na branch: feature/delete-user
após finalizar as alterações necessarias no código, você pode efetuar uma merge
na master
(mesclagem) garantindo assim que todos os commits entrem corretamente.
Porque é importante usar boas mensagens em um commit?
Independente da pressa, preguiça ou até mesmo pressão. Boas mensagens de commits podem ser uma documentação futura alem de trazer mais contexto pra quem revisa o código.
O commit possui dois parametros, exemplo:
git commit -m "Title" -m "Description"
Exemplo ruim
First commit :hammer:
Exemplo bom
Microserviço que exibe e manipula informações pessoais do usuário.
Utilizado:
Laravel 5.7
Mysql 5.5.27
Exemplo ruim
Remover regra do user.
Exemplo bom
Ao atualizar o endereço na tela 'User' não verificava se 'user.active' para atualizar endereço cadastrado
Referência
https://git-scm.com/book/en/v2
https://git-scm.com/docs/gittutorial
https://git-scm.com/docs/giteveryday
https://receitasdecodigo.com.br/devops/git-o-que-e-um-branch
Entendendo GIT | (não é um tutorial!):
https://www.youtube.com/watch?v=6Czd1Yetaac
https://josiaspereira.com.br/como-escrever-uma-boa-mensagem-de-commit-no-git/
Git - git flow na prática:
https://www.youtube.com/watch?v=wzxBR4pOTTs