Git é um sistema de controle de versão distribuído que permite a múltiplos desenvolvedores trabalhar em um mesmo projeto simultaneamente, sem interferir uns nos trabalhos dos outros. Ele mantém um histórico completo de todas as mudanças feitas em um projeto, permitindo que os desenvolvedores voltem para qualquer ponto no histórico se necessário.
GitHub é uma plataforma online que utiliza o Git para ajudar desenvolvedores a colaborar. Ele é como uma rede social para códigos, permitindo que os usuários "publiquem" seus projetos, compartilhem com outros, e colaborem juntos.
<aside> 🕢 Imagine um escritor que está escrevendo um livro. Cada vez que ele termina um capítulo, ele faz uma cópia do livro até aquele ponto e guarda na sua estante (este é o nosso "commit"). Se em algum momento ele decidir que não gosta do rumo que a história está tomando, ele pode simplesmente pegar um dos livros anteriores da estante e começar de lá. Esta estante é como o Git, armazenando diferentes versões do projeto.
Agora, imagine se esse escritor quiser que outros leiam e até mesmo colaborem na escrita. Ele pode colocar seu livro em uma biblioteca pública, onde outros escritores podem pegar, ler e até mesmo adicionar suas próprias partes. Esta biblioteca é como o GitHub.
</aside>
<aside> 🍔 Imagine que você esteja desenvolvendo um aplicativo de receitas. Você já tem várias funcionalidades prontas e cada uma delas foi salva em um commit diferente no Git.
Você então decidiu que quer adicionar uma nova funcionalidade: um timer para cozinhar. Ao invés de fazer isso no branch principal (master/main), você cria um novo branch chamado "feature-timer" e começa a trabalhar nele. Isso permite que você experimente e teste sem afetar o código principal.
Após concluir, você irá fazer o merge dessa branch com a main. Todas as mudanças que você fez agora são parte do projeto principal.
Você então decide compartilhar seu aplicativo com o mundo e coloca seu código no GitHub. Agora, outro desenvolvedor pode encontrar o seu repositório, fazer um fork, adicionar uma funcionalidade para compartilhar receitas e envia um PR para você. Você gosta da ideia, revisa o código (em um processo chamado code review), e aceita o PR. Agora, a funcionalidade do outro desenvolvedor é parte do seu aplicativo.
</aside>
Em projetos do mundo real, especialmente em ambientes de desenvolvimento profissional, a estrutura e organização dos branches se tornam cruciais. O fluxo de trabalho geralmente é mais complexo do que apenas ter uma branch principal e algumas branches de features, como pode ser o caso em projetos menores ou pessoais.