Git (Global Information Tracker) - Versionamento
Git - Um Sistema de Controle de Versão Distribuído
O Git é um sistema de controle de versão distribuído que foi criado por Linus Torvalds em 2005 para o desenvolvimento do kernel Linux. O Git controla alterações feitas em uma base de código ao longo do tempo e permite que vários desenvolvedores trabalhem na mesma base de código simultaneamente.
Como o Git funciona
O Git funciona registrando alterações em uma base de código como commits. Cada commit captura um snapshot dos arquivos e diretórios em um determinado momento. O Git armazena essas informações em um banco de dados local na máquina do desenvolvedor. Os desenvolvedores podem então fazer push e pull de commits de e para repositórios remotos para compartilhar alterações e sincronizar sua base de código local com outros.
Principais recursos do Git:
-
Distribuído - Os desenvolvedores têm uma cópia completa do repositório Git e os commits são armazenados localmente. Isso permite trabalhar offline e sem depender de um servidor central.
-
Ramificação e mesclagem - Branches isolam o trabalho e alterações podem ser mescladas entre branches. Isso suporta o desenvolvimento concorrente.
-
Integridade - O Git controla checksums de conteúdos de arquivos e estruturas de diretórios para garantir integridade e evitar corrupção de dados.
-
Controle de histórico - O Git controla todas as alterações no histórico de um projeto, permitindo revisitar qualquer versão.
Usando o Git
Alguns comandos e fluxos de trabalho comuns do Git incluem:
-
git clone - Clona/copia um repositório remoto para sua máquina local
-
git add - Prepara alterações de arquivos para serem committed
-
git commit - Registra alterações no repositório local
-
git push - Envia commits locais para o repositório remoto
-
git pull - Puxa os commits mais recentes do repositório remoto
-
git branch - Gerencia branches para isolar trabalho
-
git merge - Mescla alterações entre branches
-
git log - Visualiza histórico de commits e alterações
Rebase
Rebase é um recurso que permite reescrever o histórico de commits em um branch. Ele move ou combina uma sequência de commits para uma nova base. O rebase é usado antes de mesclar branches para manter um histórico linear e remover commits desnecessários.
Para rebasar:
git checkout feature-branch
git rebase main
Isso aplica os commits de feature-branch
em cima do main
, movendo os commits do main
para a nova base. Conflitos precisam ser resolvidos manualmente.
O rebase não deve ser usado em commits enviados a repositórios remotos públicos, pois reescreve o histórico. Ele é mais adequado para reorganizar commits locais antes de compartilhá-los.
Benefícios do rebase:
- Reorganiza commits em um histórico linear
- Aplica commits em uma nova base
- Combina ou remove commits
Recuperar Stash que foi Dropado
- Liste os hash commits/stash que estão no cache
❯ git fsck --no-reflog | awk '/dangling commit/ {print $3}'
- Pegue informações do commit/stash para achar o que você quer recuperar
❯ git show da820072f5484b93c3a197212c7a32ba7748a519
- Recupere seu stash e seja feliz
❯ git stash apply da820072f5484b93c3a197212c7a32ba7748a519
Remover um arquivo do histórico de commits da sua branch no GIT
git filter-repo --path .env --invert-paths
Cherry Picking
Cherry-picking no Git permite que você selecione e aplique commits de um branch em outro de forma seletiva. Isso pode ser útil quando você só quer pegar certos commits de um branch de feature e mesclá-los em um branch de release, por exemplo.
git cherry-pick 368263d1eff5
Sem commitar:
git cherry-pick -n 368263d1eff5
Provedores de Git como GitHub
Provedores de hospedagem de repositório Git como o GitHub oferecem recursos de colaboração além do controle de versão Git. Estes incluem:
-
Rastreamento de issues - Controla solicitações de recursos e bugs
-
Pull requests - Permite revisar alterações antes de mesclar
-
Controle de acesso - Gerencia permissões de usuários
-
Visualizações - Gráficos para visualizar atividade do projeto
-
Hospedagem de projeto - Hospeda sites e documentação de projetos
Conventional Commits
Os conventional Commits são uma convenção amplamente adotada para padronizar as mensagens de commit em projetos de software. Essa prática ajuda a manter um histórico de commits limpo e compreensível, facilitando a compreensão das alterações realizadas ao longo do tempo. A estrutura básica de um conventional commit consiste em um tipo, um escopo opcional e uma descrição concisa, separados por dois pontos. Por exemplo: feat: adiciona nova funcionalidade X
.
Os tipos mais comuns são:
feat
: uma nova funcionalidadefix
: correção de um bugdocs
: alterações na documentaçãostyle
: mudanças de formatação ou estilo de códigorefactor
: refatoração de código sem alterações funcionaistest
: adição ou alteração de testeschore
: outras alterações que não modificam o código-fonte
Além disso, as mensagens de commit devem ser escritas no tempo verbal presente e explicar claramente o motivo da alteração. O uso de conventional commits padroniza o processo de desenvolvimento, melhora a rastreabilidade das alterações e facilita a geração de notas de lançamento automatizadas.
Conclusão
Em resumo, o Git é um sistema de controle de versão distribuído que oferece gerenciamento superior de código-fonte. Ele é complementado por provedores Git como o GitHub que adicionam funções colaborativas como pull requests e rastreamento de issues. Juntos, eles fornecem uma solução completa de controle de versão e hospedagem de projetos.
Referências
Aprenda mais sobre GIT: https://learngitbranching.js.org