Git: Guia de melhores práticas do Git e colaboração em equipe

Boas práticas com o Git podem melhorar significativamente a colaboração em equipe e a qualidade do código. Esta seção resume as melhores práticas do Git, incluindo diretrizes para commits, estratégias de ramificação, fluxos de trabalho e colaboração em equipe.

1. Diretrizes para envio de trabalhos

(1) Por que as informações padronizadas sobre commits são necessárias?

Informações de envio devidamente formatadas podem:

(2) Padrão de commits convencionais

Esta é a convenção de mensagens de commit mais popular atualmente:

TEXT 📖 Somente leitura
<type>(<scope>): <subject>

<body>

<footer>

Explicação de cada seção:

(3) Explicação detalhada dos tipos de envio

Tipo Descrição Exemplo
feat Novo recurso feat: Adicionada a funcionalidade de login do usuário
correção Correção de bug correção: Corrigido o erro de autenticação no login
docs Atualizações da documentação docs: Atualização da documentação da API
estilo Formatação de código estilo: Ajustar a indentação do código
refactor Refatoração refactor: Otimizar a lógica da consulta
perf Otimização de desempenho perf: Otimização de consultas ao banco de dados
teste Teste teste: Adicionar teste de unidade
tarefa Compilação/Ferramentas tarefa: Atualizar a configuração de compilação
ci Configuração do CI ci: Adicionar GitHub Actions
revert Reverter revert: Reverter o recurso de login

▶ Exemplo: Mensagem de commit adequada

BASH
# Single-line commit
git commit -m "feat: Add User Login Functionality"

# Range-Based Submissions
git commit -m "feat(auth): AddJWTCertification Support"

# Multi-line commit
git commit -m "feat(auth): AddOAuth2.0Login Support" -m "- SupportGoogle、GitHubLog In" -m "- Add Login State Persistence" -m "Closes #123"

# Use the editor to write a detailed commit message
git commit

(4) Melhores práticas para o envio de informações

Boas mensagens de commit:

TEXT 📖 Somente leitura
feat(auth): AddOAuth2.0Login Support

- SupportGoogle、GitHub、WeChat Third-Party Login
- Add Login State Persistence
- Enable Auto-RefreshTokenMechanism

Closes #456

Mensagens de commit inadequadas:

TEXT 📖 Somente leitura
update
fix bug
I made a few changes.
WIP
asdfasdf

Melhores práticas:


2. Estratégia de ramificação

(1) O modelo Git Flow

O Git Flow é a estratégia de ramificação mais clássica:

100%
graph TB
    main[main<br/>Production Environment] --> release[release/*<br/>Preparing for Release]
    release --> develop[develop<br/>Development Environment]
    develop --> feature[feature/*<br/>Feature Development]
    main --> hotfix[hotfix/*<br/>Emergency Fix]
    
    style main fill:#d4edda
    style develop fill:#fff3cd
    style feature fill:#e1f5ff
    style hotfix fill:#f8d7da

Tipo de agência:

▶ Exemplo: Fluxo de trabalho do Git Flow

BASH
# 1. Create a feature branch from develop
git checkout develop
git checkout -b feature/user-auth

# 2. Develop and Submit
git add .
git commit -m "feat(auth): Add User Authentication"

# 3. Merge back intodevelop
git checkout develop
git merge --no-ff feature/user-auth
git branch -d feature/user-auth

# 4. Create a release branch
git checkout -b release/v1.0.0

# 5. Preparing for Release(FixBug、Update version numbers, etc.)
git commit -m "chore: Update the version number to1.0.0"

# 6. Merge into main and develop
git checkout main
git merge --no-ff release/v1.0.0
git tag -a v1.0.0 -m "Version 1.0.0"

git checkout develop
git merge --no-ff release/v1.0.0
git branch -d release/v1.0.0

# 7. Emergency Fix
git checkout main
git checkout -b hotfix/critical-bug
git commit -m "fix: Urgent FixBug"
git checkout main
git merge --no-ff hotfix/critical-bug
git tag -a v1.0.1 -m "Version 1.0.1"
git checkout develop
git merge --no-ff hotfix/critical-bug
git branch -d hotfix/critical-bug

(2) O modelo GitHub Flow

O GitHub Flow é mais simples e mais adequado para a implantação contínua:

100%
graph LR
    A[main<br/>Always deployable] --> B[featureBranch]
    B --> C[Pull Request]
    C --> D[Merge intomain]
    D --> E[Automatic Deployment]
    
    style A fill:#d4edda
    style E fill:#c3e6cb

Características:

▶ Exemplo: Fluxo de trabalho do GitHub Flow

BASH
# 1. Update Locallymain
git checkout main
git pull origin main

# 2. Create a feature branch
git checkout -b feature/new-feature

# 3. Develop and Submit
git add .
git commit -m "feat: Add a New Feature"

# 4. Push Branch
git push -u origin feature/new-feature

# 5. Create a Pull Request on GitHub

# 6. Merge after the code review is approved

# 7. Clean Up Branches
git checkout main
git pull origin main
git branch -d feature/new-feature
git push origin --delete feature/new-feature

(3) Convenções de nomenclatura de ramificações

Tipo de ramificação Convenção de nomenclatura Exemplo
Recurso recurso/* recurso/autenticação-de-usuário
Correção de bug fix/* fix/login-validation
Correção de emergência hotfix/* hotfix/vulnerabilidade-de-segurança
Lançamento release/* release/v1.0.0
Experimento experiment/* experiment/nova-arquitetura

3. Fluxo de trabalho

(1) Fluxo de trabalho diário de desenvolvimento

100%
sequenceDiagram
    participant Developer
    participant Local Warehouse
    participant Remote Repository
    participant CI/CD
    
    Developer->>Local Warehouse: git pullUpdate the code
    Developer->>Local Warehouse: Create a feature branch
    Developer->>Local Warehouse: Develop and Submit
    Developer->>Remote Repository: git pushPush Branch
    Developer->>Remote Repository: CreatePull Request
    Remote Repository->>CI/CD: Automated Testing
    CI/CD->>Remote Repository: Test Passed
    Remote Repository->>Local Warehouse: Merge intomain
    Developer->>Local Warehouse: git pullSynchronize

(2) Processo de desenvolvimento de funcionalidades

▶ Exemplo: Processo completo de desenvolvimento de funcionalidades

BASH
# 1. Start Developing New Features
git checkout main
git pull origin main
git checkout -b feature/user-profile

# 2. Submit Regularly(Iterate quickly)
git add src/profile.js
git commit -m "feat(profile): Add User Profile Page"

git add src/api/profile.js
git commit -m "feat(profile): Add InformationAPIInterface"

git add src/test/profile.test.js
git commit -m "test(profile): Add Unit Tests"

# 3. Stay in touch withmainSynchronize
git fetch origin
git rebase origin/main

# 4. Push and CreatePR
git push -u origin feature/user-profile

# 5. PRMerge after approval

# 6. Cleanup
git checkout main
git pull origin main
git branch -d feature/user-profile

(3) Processo de correção de bugs

▶ Exemplo: Processo de correção de bugs

BASH
# 1. Create a fix branch from main
git checkout main
git pull origin main
git checkout -b fix/login-error

# 2. Identify and FixBug
# View logs to troubleshoot issues
git log --grep="login"

# Fix the code
git add src/auth.js
git commit -m "fix(auth): Fix the login authentication error

- Fix the validation logic for empty passwords
- Add an input length check

Fixes #789"

# 3. Push and CreatePR
git push -u origin fix/login-error

# 4. Post-merger cleanup
git checkout main
git pull origin main
git branch -d fix/login-error

4. Habilidades de trabalho em equipe

(1) Revisão de código

Melhores práticas para pull requests:

Ao criar um PR:

Ao revisar um PR:

▶ Exemplo: Modelo de descrição de RP

MARKDOWN
**Feature Description**
Add User Profile Page,Supports viewing and editing user information。

**Details of the Changes**
- New Profile Components
- Add Information Edit Form
- Implement the profile picture upload feature
- Add Unit Tests

**Test**
- [x] Unit tests passed
- [x] Manual testing completed
- [x] Responsive Layout Testing

**Screenshot**
[Add a screenshot]

**RelatedIssue**
Closes #123

(2) Estratégias de resolução de conflitos

▶ Exemplo: Prevenção e resolução de conflitos

BASH
# Conflict Prevention
# 1. Synchronize remote code frequently
git fetch origin
git rebase origin/main

# 2. Iterate quickly,Frequent Submissions
# Commit after completing each small feature

# 3. Timely Communication,Scope of Coordinated Revisions

# Resolving Conflicts
# 1. Pull the latest code
git pull --rebase origin main

# 2. Resolving Conflicts
# Editing Files with Conflicts,Keep the correct content

# 3. Mark the conflict as resolved
git add .

# 4. Continuerebase
git rebase --continue

# 5. Push
git push origin feature

(3) Mantenha o histórico organizado

▶ Exemplo: Um histórico de commits organizado

BASH
# UsagerebaseMerge Commit
git rebase -i HEAD~3

# In the editor:
# pick a1b2c3d feat: Add FeatureA
# squash d4e5f6g feat: Improve functionalityA
# squash h7i8j9k feat: Optimization FeaturesA

# Edit the merged commit message after saving
# feat: Add FeatureA

# Usagerebaserather thanmerge
git pull --rebase origin main

# View the complete history
git log --oneline --graph

# Output:
# * a1b2c3d feat: Add FeatureC
# * d4e5f6g feat: Add FeatureB
# * h7i8j9k feat: Add FeatureA

5. Melhores práticas para a configuração do Git

(1) Configurações globais recomendadas

▶ Exemplo: Configurando o Git

BASH
# User Information
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# Default Editor
git config --global core.editor "code --wait"

# Default branch name
git config --global init.defaultBranch main

# Automatic Line Break Conversion
git config --global core.autocrlf input  # Linux/Mac
git config --global core.autocrlf true   # Windows

# Pull Strategy
git config --global pull.rebase true

# Push Strategy
git config --global push.default simple

# Voucher Storage
git config --global credential.helper store

# Alias Configuration
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

(2) Configuração do .gitignore

▶ Exemplo: Um arquivo .gitignore completo

TEXT 📖 Somente leitura
# Dependency Directory
node_modules/
vendor/
venv/

# Compilation Output
dist/
build/
out/
*.o
*.class
*.jar
*.exe

# IDELayout
.vscode/
.idea/
*.swp
*.swo
.DS_Store

# Environment Configuration
.env
.env.local
.env.*.local
config.local.js

# Log Files
*.log
logs/
npm-debug.log*
yarn-debug.log*

# Test Coverage
coverage/
.nyc_output/

# Temporary Files
tmp/
temp/
*.tmp
*.temp

# Operating System Files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

(3) Hooks do Git

▶ Exemplo: hook pre-commit

BASH
#!/bin/bash
# .git/hooks/pre-commit

# Run Code Check
npm run lint
if [ $? -ne 0 ]; then
    echo "❌ Code check failed,Please fix it and then submit it."
    exit 1
fi

# Run Test
npm test
if [ $? -ne 0 ]; then
    echo "❌ Test Failed,Please fix it and then submit it."
    exit 1
fi

echo "✅ Code review and testing passed"
exit 0

6. Perguntas frequentes e soluções

(1) Como lidar com erros comuns

▶ Exemplo: Tratamento de erros

BASH
# Error1:Push Rejected
git push origin main
# ! [rejected] main -> main (fetch first)

# Resolve:
git pull --rebase origin main
git push origin main

# Error2:Merge Conflicts
git merge feature
# CONFLICT (content): Merge conflict in file.js

# Resolve:
# Editing Files with Conflicts
git add file.js
git commit

# Error3:detached HEAD
git checkout a1b2c3d
# You are in 'detached HEAD' state

# Resolve:
git switch -c new-branch

# Error4:Accidentally Deleted a Branch
git branch -D feature

# Restore:
git reflog
git checkout -b feature <commit-id>

(2) Otimização de desempenho

▶ Exemplo: Otimização do desempenho do Git

BASH
# Optimizing the Performance of Large Repositories
git gc --aggressive

# Partial Clone(Large Warehouse)
git clone --filter=blob:none --sparse <url>
git sparse-checkout init --cone
git sparse-checkout add src/

# Shallow Cloning(Only the most recent history is needed)
git clone --depth=1 <url>

# Disable File Mode Change Detection(Windows)
git config core.fileMode false

❓ Perguntas Frequentes

P: Como posso manter meu histórico de commits organizado?

R: Use git rebase -i para mesclar commits relacionados, use git pull --rebase em vez de “merge”, escreva mensagens de commit claras e evite commits sem sentido.

P: O que devo usar, o Git Flow ou o GitHub Flow?

R: O Git Flow é adequado para projetos com um ciclo de lançamento definido, enquanto o GitHub Flow é adequado para projetos com implantação contínua. Para projetos pequenos, recomenda-se o GitHub Flow, pois é mais simples e eficiente.

P: Como devemos abordar o desenvolvimento de funcionalidades de longo prazo?

R: Faça a fusão regularmente das atualizações do branch main/develop para manter a sincronização, use sinalizadores de recurso para controlar a ativação de recursos e divida os recursos principais em pull requests menores para uma fusão gradual.

P: Como posso evitar conflitos de mesclagem?

R: Sincronize o código remoto com frequência, dê passos pequenos e rápidos com commits frequentes, comunique-se prontamente para coordenar o escopo das alterações e use rebase em vez de merge.

P: Em que idioma as informações devem ser enviadas?

R: Recomendamos o uso do inglês, pois ele está em conformidade com os padrões internacionais e facilita a colaboração em código aberto. O chinês pode ser usado em projetos internos da equipe, mas é preciso manter a consistência.


📖 Resumo


📝 Exercícios

  1. Exercícios básicos: Configure seu ambiente Git, incluindo informações de usuário, aliases e um editor; crie mensagens de commit que sigam as melhores práticas; e desenvolva bons hábitos de uso do Git.

  2. Exercício avançado: Implemente o fluxo de trabalho completo do GitHub Flow: crie um branch de recurso, desenvolva o recurso, crie uma pull request (simulação), faça a fusão do branch e limpe o branch para vivenciar o processo de colaboração em equipe.

  3. Desafio: Escreva um guia de uso do Git para a equipe, incluindo diretrizes para commits, políticas de ramificação, fluxos de trabalho e soluções para problemas comuns, a fim de ajudar os membros da equipe a desenvolver bons hábitos no uso do Git.


🎉 Parabéns! Você concluiu todo o tutorial do Git e dominou as habilidades essenciais do controle de versão!

Recomendações para estudos futuros:

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%