/git-guia-de-sobrevivencia

Demonstrações dos comandos mais utilizados em situações do dia a dia de um dev usando git

Primary LanguageHTML

Quem tem medo de rebase? Entre outras histórias.

Este repositório traz algumas dicas úteis e alguns conceitos para você utilizar Git em seu dia a dia, e serve como roteiro para minha talk, de mesmo nome, para meu time de web.

Prefácio

Não tenha medo do Git e não tenha medo de errar. Ele é seu amigo e pode te ajudar no dia a dia, além de ajudar outros desenvolvedores a entenderem seu código.

Começaremos a olhar um projeto muito simples (sim, gênios do renascimento pq não?), e adicionaremos algumas funcionalidades a ele, eventualmente nos deparando com alguns problemas do dia a dia, como conflitos.
Também faremos rebases, deletaremos branches e commits por acidente, cometeremos alguns erros, precisaremos de commits que ainda não chegaram à main...
Resumindo, tudo o que nós vivemos no dia a dia, né? Temos muito a cobrir, então let's start!


Capítulo I: A iniciação

O que é o Git? Por que precisamos dele?

Preparando o terreno

Configure suas credenciais, com nome e email:

$ git config --global user.name "Da Vinci"
$ git config --global user.email da.vinci@renaissance.com

Configure também seu editor padrão (recomendo vi ou vim, para sair dele utilize o comando :quit)

$ git config --global core.editor vim

Por fim, clone um projeto para começar a trabalhar. Ou inicie um projeto git através do comando git init.

Capítulo II: Trabalhando em equipe

Este capítulo apresenta a branch principal, main, refletindo o trabalho de uma equipe qualquer.
Ela possui alguns commits que configuram o projeto, porém, a partir de um certo ponto, novas branches de trabalho foram criadas a partir dela.

O diagrama abaixo apresenta este momento do projeto: Fonte: Autor

Mantendo seu trabalho atualizado

Um conto sobre Merge

De acordo com a documentação oficial, o merge "une dois ou mais históricos de desenvolvimento".

Vejamos o seguinte exemplo para entendermos git merge de uma vez por todas.

Supondo que o dev que esteja trabalhando na branch secao-dama-com-arminho tenha finalizado sua feature e agora deseje atualizar sua branch com a main, afinal a branch principal de trabalho desta equipe continuou avançando.

Então, para atualizar a branch, é utilizado o comando git pull origin main. Seu editor configurado no Capítulo I então aparecerá com a seguinte mensagem pré definida:

Merge branch 'main' of github.com:MarianaPicolo/git-everyday-basics into secao-dama-com-arminho

Salve e saia do editor.

Se você configurou vi ou vim, pode salvar o arquivo e sair utilizando o comando :wq.

Por fim, o Git exibirá a seguinte mensagem:

From github.com:MarianaPicolo/git-everyday-basics
 * branch            main       -> FETCH_HEAD
Auto-merging project/index.html
Merge made by the 'recursive' strategy.
 README.md          |   6 +++++-
 project/index.html |  10 +++++-----
 starting.png       | Bin 0 -> 102669 bytes
 3 files changed, 10 insertions(+), 6 deletions(-)
 create mode 100644 starting.png

Não tivemos conflitos, e agora a branch secao-dama-com-arminho está atualizada em relação a main, resultando na seguinte árvore de commits:

Fonte: Autor

Perceba que as hashes dos commits que estavam na main permaneceram como antes do merge (balões em azul), mas o commit que insere a nova feature(adiciona secao dama com arminho) ficou entre dois commits que estavam previamente na main.

Isso acontece porque o git merge preserva a árvore de commits.......

Quem tem medo de Rebase?

Quando o trabalho conflita

O temido -f

Bônus: --onto o quê?

Colhendo cerejas 🍒

Capitulo III: Manipulando a história?

Querido diário reflog

amend

squash