Git é um sistema de controle de versão distribuído que permite gerenciar e acompanhar alterações em projetos de software de maneira eficiente e colaborativa. Criado por Linus Torvalds em 2005, o Git é amplamente utilizado no desenvolvimento de software para facilitar a colaboração entre desenvolvedores e manter um histórico completo das alterações feitas no código.
- Rastreamento de Alterações: Permite acompanhar o histórico de mudanças no projeto.
- Colaboração: Facilita o trabalho em equipe, permitindo que vários desenvolvedores trabalhem em paralelo.
- Segurança: Armazena as alterações de forma segura e rastreável.
- Controle de Versão: Mantém diferentes versões do projeto, permitindo reversões rápidas a versões anteriores.
- Repositório 📁: O projeto como um todo. O diretório raiz de onde serão monitoradas todas as alterações.
- Commit 💾: O ato de salvar uma ou mais alterações no código. Também pode se referir ao conjunto dessas alterações.
- Working Tree 🌳: O espaço de trabalho onde você faz modificações nos arquivos do projeto. Alterações locais são realizadas aqui antes de serem adicionadas à área de preparação.
- Staging Area 🧩: Uma área de preparação onde você seleciona as alterações que serão salvas no próximo commit.
- Branches 🌿: Ramificações que permitem trabalhar em paralelo no projeto sem afetar a ramificação principal.
-
Instalação
- Faça o download do Git para o seu sistema operacional.
- Verifique a instalação com o comando:
git --version
-
Configuração Inicial
- Configure seu nome de usuário e e-mail para identificar suas alterações:
git config --global user.name "Seu Nome" git config --global user.email "seu.email@exemplo.com"
-
Criando um Repositório
- Inicializar um repositório local:
git init
- Clonar um repositório existente:
git clone <url-do-repositorio>
pwd📜: Exibe o caminho completo do diretório atual.ls📋: Lista o conteúdo do diretório atual.mkdir🗂️: Cria um novo diretório vazio.cd🔄: Navega entre diretórios.ni/touch📝: Cria um arquivo vazio.cp📄: Copia arquivos ou diretórios.mv🚚: Move ou renomeia arquivos/diretórios.rm🗑️: Remove arquivos ou diretórios.code .💻: Abre o Visual Studio Code no diretório atual.clear✨: Limpa a tela do terminal.exit❌: Fecha o terminal ou finaliza uma sessão.
git init🛠️: Inicializa um repositório no diretório atual.git status🔎: Exibe a situação atual da working tree (o que foi modificado e o que está preparado).git add .➕: Adiciona arquivos modificados à área de preparação (staging area).git rm --cached🗑️: Remove arquivos da área de preparação (desfaz o comandoadd).git commit -m "mensagem do commit"💬: Salva definitivamente as alterações preparadas no histórico do repositório.git log📜: Mostra o histórico de commits.git diff⚡: Exibe as alterações entre diferentes commits ou entre a working tree e o repositório.git restore🧹: Reverte as alterações em um arquivo, retornando ao estado do último commit.git merge🔗: Combina mudanças de uma branch com a branch atual.git pull⬇️: Atualiza a branch local com as alterações do repositório remoto.git push⬆️: Envia as alterações da branch local para o repositório remoto.
De acordo com a documentação do Conventional Commits, commits semânticos são uma convenção simples para ser utilizada nas mensagens de commit. Essa convenção define um conjunto de regras para criar um histórico de commit explícito, facilitando a criação de ferramentas automatizadas e compreensão das alterações.
Esses commits ajudam você e sua equipe a entenderem de forma facilitada quais alterações foram realizadas no código. Essa identificação ocorre por meio de uma palavra que identifica se aquele commit realizado se trata de uma alteração de código, atualização de pacotes, documentação, alteração de visual, teste, entre outros.
O commit semântico possui os elementos estruturais abaixo (tipos), que informam a intenção do seu commit ao utilizador(a) de seu código.
-
feat- Commits do tipo feat indicam que seu trecho de código está incluindo um novo recurso (se relaciona com o MINOR do versionamento semântico). -
fix- Commits do tipo fix indicam que seu trecho de código commitado está solucionando um problema (bug fix), (se relaciona com o PATCH do versionamento semântico). -
docs- Commits do tipo docs indicam que houveram mudanças na documentação, como por exemplo no Readme do seu repositório. (Não inclui alterações em código). -
test- Commits do tipo test são utilizados quando são realizadas alterações em testes, seja criando, alterando ou excluindo testes unitários. (Não inclui alterações em código) -
build- Commits do tipo build são utilizados quando são realizadas modificações em arquivos de build e dependências. -
perf- Commits do tipo perf servem para identificar quaisquer alterações de código que estejam relacionadas a performance. -
style- Commits do tipo style indicam que houveram alterações referentes a formatações de código, semicolons, trailing spaces, lint... (Não inclui alterações em código). -
refactor- Commits do tipo refactor referem-se a mudanças devido a refatorações que não alterem sua funcionalidade, como por exemplo, uma alteração no formato como é processada determinada parte da tela, mas que manteve a mesma funcionalidade, ou melhorias de performance devido a um code review. -
chore- Commits do tipo chore indicam atualizações de tarefas de build, configurações de administrador, pacotes... como por exemplo adicionar um pacote no gitignore. (Não inclui alterações em código) -
ci- Commits do tipo ci indicam mudanças relacionadas a integração contínua (continuous integration). -
raw- Commits do tipo raw indicam mudanças relacionadas a arquivos de configurações, dados, features, parâmetros. -
cleanup- Commits do tipo cleanup são utilizados para remover código comentado, trechos desnecessários ou qualquer outra forma de limpeza do código-fonte, visando aprimorar sua legibilidade e manutenibilidade. -
remove- Commits do tipo remove indicam a exclusão de arquivos, diretórios ou funcionalidades obsoletas ou não utilizadas, reduzindo o tamanho e a complexidade do projeto e mantendo-o mais organizado.
- Use mensagens claras e objetivas para descrever o que foi alterado e por quê.
- Alinhe-se aos padrões do time.
- Verifique mudanças com
git diffpara evitar commits incompletos ou incorretos. - Use
git statuspara confirmar o que será incluído no commit.
- Cada commit deve conter uma pequena funcionalidade ou correção.
- Isso facilita revisões, testes e reverte alterações problemáticas.
- Adicione um emoji no início da mensagem para representar visualmente o tipo de alteração (ex.: ✨, 🐛, 📚).
- Exemplo:
git commit -m ":sparkles: feat: Adiciona funcionalidade de login"
| Tipo do commit | Emoji | Palavra-chave |
|---|---|---|
| Acessibilidade | ♿ :wheelchair: |
|
| Adicionando um teste | ✅ :white_check_mark: |
test |
| Atualizando a versão de um submódulo | ⬆️ :arrow_up: |
|
| Retrocedendo a versão de um submódulo | ⬇️ :arrow_down: |
|
| Adicionando uma dependência | ➕ :heavy_plus_sign: |
build |
| Alterações de revisão de código | 👌 :ok_hand: |
style |
| Animações e transições | 💫 :dizzy: |
|
| Bugfix | 🐛 :bug: |
fix |
| Comentários | 💡 :bulb: |
docs |
| Commit inicial | 🎉 :tada: |
init |
| Configuração | 🔧 :wrench: |
chore |
| Deploy | 🚀 :rocket: |
|
| Documentação | 📚 :books: |
docs |
| Em progresso | 🚧 :construction: |
|
| Estilização de interface | 💄 :lipstick: |
feat |
| Infraestrutura | 🧱 :bricks: |
ci |
| Lista de ideias (tasks) | 🔜 :soon: |
|
| Mover/Renomear | 🚚 :truck: |
chore |
| Novo recurso | ✨ :sparkles: |
feat |
| Package.json em JS | 📦 :package: |
build |
| Performance | ⚡ :zap: |
perf |
| Refatoração | ♻️ :recycle: |
refactor |
| Limpeza de Código | 🧹 :broom: |
cleanup |
| Removendo um arquivo | 🗑️ :wastebasket: |
remove |
| Removendo uma dependência | ➖ :heavy_minus_sign: |
build |
| Responsividade | 📱 :iphone: |
|
| Revertendo mudanças | 💥 :boom: |
fix |
| Segurança | 🔒️ :lock: |
|
| SEO | 🔍️ :mag: |
|
| Tag de versão | 🔖 :bookmark: |
|
| Teste de aprovação | ✔️ :heavy_check_mark: |
test |
| Testes | 🧪 :test_tube: |
test |
| Texto | 📝 :pencil: |
|
| Tipagem | 🏷️ :label: |
|
| Tratamento de erros | 🥅 :goal_net: |
|
| Dados | 🗃️ :card_file_box: |
raw |
Branches são ramificações que permitem trabalhar em diferentes linhas de desenvolvimento dentro de um mesmo repositório.
- Isolamento de Trabalho: Permite trabalhar em novas funcionalidades ou correções sem interferir na branch principal.
- Histórico Organizado: Mantém o histórico de desenvolvimento claro e bem estruturado.
- Colaboração Facilitada: Desenvolvedores podem trabalhar em suas próprias branches e integrar (merge) as mudanças quando finalizadas.
- Branch Principal: Geralmente chamada de
mainoumaster, é a linha principal de desenvolvimento onde o código mais estável é mantido. - Branch de Funcionalidade: Usada para desenvolver uma nova funcionalidade ou melhoria. Criada a partir da branch principal e, ao final, suas mudanças são integradas de volta.
- Branch de Correção: Focada em resolver problemas ou bugs específicos. Funciona de maneira semelhante à branch de funcionalidade.
- Criar uma nova branch:
git branch nome-da-branch
- Mudar para uma branch existente:
git checkout nome-da-branch
- Dica: Use
git checkout -b nome-da-branchpara criar e mudar para uma nova branch em um único comando.
- Listar todas as branches no repositório:
git branch
- Integrar mudanças de uma branch para outra:
git merge nome-da-branch
Após concluir o trabalho em uma branch e integrá-la à principal, você deve deletá-la para manter o repositório organizado.
- Deletar branch local:
git branch -d nome-da-branch
- Forçar a deleção de uma branch local:
git branch -D nome-da-branch
- Deletar branch remota:
git push origin --delete nome-da-branch
- Renomear branch atual:
git branch -m novo-nome
- Renomear branch específica:
git branch -m nome-antigo novo-nome
Conflitos de merge ocorrem quando o Git não consegue combinar automaticamente mudanças feitas em duas branches diferentes.
- Alterações Conflitantes: Mudanças incompatíveis feitas na mesma linha de um arquivo.
- Exclusões Conflitantes: Um desenvolvedor exclui uma linha ou arquivo que outro modificou.
-
Identificar os arquivos em conflito:
- Use
git statuspara listar os arquivos marcados como "both modified".
- Use
-
Abrir os arquivos conflitantes:
- Arquivos em conflito terão marcações especiais, como
<<<<<<<,=======, e>>>>>>>.
- Arquivos em conflito terão marcações especiais, como
-
Resolver os conflitos:
- Edite os arquivos para combinar as mudanças de forma adequada e remova as marcações de conflito.
-
Marcar os conflitos como resolvidos:
git add nome-do-arquivo
-
Finalizar o merge:
git commit
- Clonar o repositório e configurar o ambiente inicial.
- Criar uma nova branch para trabalhar em uma tarefa específica:
git checkout -b nome-da-branch
- Fazer alterações no projeto na nova branch.
- Adicionar (
git add) e commitar (git commit) as mudanças. - Subir a branch para o repositório remoto e abrir um Pull Request (PR).
- O líder do projeto aprova o PR e integra as alterações na branch principal (
git merge). - Deletar branches antigas e continuar o ciclo de desenvolvimento.
.gitignore🚫: Define arquivos e pastas que o Git deve ignorar, como arquivos temporários ou de configuração local..gitkeep📂: Um arquivo vazio usado para manter diretórios sem conteúdo no repositório (o Git não rastreia diretórios vazios por padrão).
-
fork- Cópia de um repositório para a sua própria conta no GitHub. Isso cria um novo repositório em sua conta que é independente do original, permitindo que você faça alterações sem afetar o repositório original. -
issues- Ferramenta usada para gerenciar tarefas, pedidos de novos recursos e correções de bugs em projetos de código aberto. As issues devem ser descritas e listadas, permitindo aos colaboradores discutirem e rastrearem o progresso das mesmas. -
pull request- Mecanismo usado para submeter alterações propostas ao repositório original. Um pull request é uma solicitação para que os mantenedores do projeto revisem e potencialmente incorporem as alterações. O pull request passará por um processo de avaliação e pode ser aceito ou rejeitado. -
gist- Ferramenta que permite o compartilhamento de trechos de código sem a necessidade de criar um repositório completo. Gists podem ser compartilhados publicamente ou de forma privada.
- Documentação Oficial do Git
- Pro Git Book - Livro gratuito sobre Git
- Guia Interativo do Git - Prática de comandos Git com visualização interativa
Esperamos que este guia tenha sido útil para você! 😄 Continuaremos expandindo com mais dicas e exemplos.
🎯 Contribuições são bem-vindas! Caso queira adicionar algo, faça um pull request no repositório.