Git: Um guia detalhado sobre commits no Git e diretrizes…
O commit é uma operação fundamental do Git; cada commit cria um instantâneo de versão exclusivo que registra o estado completo do projeto em um determinado momento.
1. Apresentação dos conceitos básicos
(1) O que é um commit?
Um commit é a unidade básica do controle de versão do Git e contém as seguintes informações:
- Snapshot: O estado completo de todos os arquivos rastreados em um determinado momento
- Metadados: Informações sobre o autor, data de envio, detalhes do envio
- Commit pai: Um ponteiro para o commit anterior (exceto no caso do primeiro commit)
- Identificador único: valor de hash SHA-1 de 40 caracteres
graph TB
A[Workspace<br/>Working Directory] -->|git add| B[Buffer<br/>Staging Area]
B -->|git commit| C[Repository<br/>Repository]
C --> D[Generate a commit object<br/>Commit Object]
D --> E[SHA-1Hash<br/>a1b2c3d4e5f6...]
style A fill:#fff3cd
style B fill:#d4edda
style C fill:#c3e6cb
style E fill:#cce5ff
(2) Processo de envio
O processo completo de envio consiste em três etapas:
- Modificar arquivo: Editar um arquivo na área de trabalho
- Alterações na área de preparação: Use
git addpara adicionar alterações à área de preparação - Criar um commit: Use
git commitpara enviar o conteúdo da área de preparação para o repositório
(3) O objetivo da apresentação
- Histórico de versões: salva o estado completo do projeto em um determinado momento
- Histórico de versões: Você pode visualizar e reverter para qualquer versão a qualquer momento
- Noções básicas de colaboração: Os membros da equipe podem colaborar com base nos commits
- Notas sobre a alteração: Descreva os detalhes desta modificação nas notas do envio.
2. Operações básicas de envio
(1) Primeira apresentação
▶ Exemplo: Criando seu primeiro commit
# Initialize the repository
git init
# Create a File
echo "# My Project" > README.md
# View Status
git status
# Untracked files:
# README.md
# Add to Stash
git add README.md
# Submit
git commit -m "Initial commit"
# Output:
# [main (root-commit) a1b2c3d] Initial commit
# 1 file changed, 1 insertion(+)
# create mode 100644 README.md
(2) Envios regulares
▶ Exemplo: Processo padrão de envio
# Edit File
echo "## Features" >> README.md
# View and Edit
git diff
# +## Features
# Add to Stash
git add README.md
# View Staging Status
git status
# Changes to be committed:
# modified: README.md
# Submit
git commit -m "Add features section"
# View commit history
git log --oneline
# a1b2c3d Add features section
# b2c3d4e Initial commit
(3) Envio em massa
▶ Exemplo: Adição e envio em lote
# Create Multiple Files
touch file1.js file2.js file3.js
# Add All Files
git add .
# Or add specific types of files
git add *.js
# Submit
git commit -m "Add multiple JavaScript files"
# View Submission
git show
# commit a1b2c3d4e5f6...
# Author: Zhang San <zhangsan@example.com>
# Date: Mon Jan 1 10:00:00 2026 +0800
#
# Add multiple JavaScript files
#
# diff --git a/file1.js b/file1.js
# new file mode 100644
# index 0000000..e69de29
3. Diretrizes para envio de trabalhos
(1) A importância do envio de informações
Boas mensagens de commit podem:
- Explique claramente as alterações: ajude os membros da equipe a entender rapidamente o que foi modificado
- Histórico fácil de rastrear: Facilita a localização de registros de desenvolvimento de recursos específicos
- Suporte a ferramentas de automação: Oferece suporte à geração automática de registros de alterações
- Aumentar a eficiência da colaboração: Reduzir os custos de comunicação
(2) Padrão de commits convencionais
Atualmente, essa é a convenção mais popular para mensagens de commit, e o formato é o seguinte:
<type>(<scope>): <subject>
<body>
<footer>
Explicação de cada seção:
- tipo (obrigatório): Tipo de envio
- escopo (opcional): Escopo do impacto
- assunto (obrigatório): Breve descrição
- corpo (opcional): Descrição detalhada
- rodapé (opcional): Informações do rodapé
(3) Tipo de envio
| Tipo | Descrição | Caso de uso |
|---|---|---|
| feat | Novo recurso | Adicionar um novo recurso |
| correção | Correção de bug | Correção de erro do programa |
| documentos | Edições de documentos | Atualizar o conteúdo do documento |
| estilo | Formatação do código | Alterações de formatação que não afetam o significado do código |
| refactor | Refatoração | Refatoração de código que não adiciona recursos nem corrige bugs |
| perf | Otimização de desempenho | Melhoria do desempenho do código |
| teste | Teste | Adicionar ou modificar o código do teste |
| tarefa | Compilação/Ferramentas | Alterações no processo de compilação ou nas ferramentas de apoio |
| ci | Configuração da CI | Modificar o arquivo de configuração da CI |
| reverter | Reverter | Commit anterior à reversão |
▶ Exemplo: Informações padrão para envio
# Single-line commit - New Features
git commit -m "feat: Add User Login Functionality"
# Single-line commit - BugFix
git commit -m "fix: Fix the login authentication error"
# Range-Based Submissions
git commit -m "feat(auth): AddJWTCertification Support"
# Multi-line commit
git commit -m "feat(user): Add a user registration feature" -m "Supports registration via email and phone number" -m "Add Form Validation and Error Messages"
# Submission with Footer(CloseIssue)
git commit -m "fix: Fixed a styling issue on the login page" -m "Closes #123"
# Use the editor to write a detailed commit message
git commit
# It will open in the editor,You can write a detailed commit message
(4) Melhores práticas para o envio de informações
Boas mensagens de commit:
feat(auth): AddOAuth2.0Login Support
- SupportGoogle、GitHub、WeChat Third-Party Login
- Add Login State Persistence
- Enable Auto-RefreshTokenMechanism
Closes #456
Mensagens de commit inadequadas:
update
fix bug
I made some changes.
WIP
4. Explicação detalhada das opções de envio
(1) Opções comuns de commit
| Opção | Descrição | Exemplo |
|---|---|---|
-m |
Enviar informações | git commit -m "message" |
-a |
Adicionar automaticamente os arquivos rastreados ao stage | git commit -a -m "message" |
--amend |
Modificar o último commit | git commit --amend |
--no-verify |
Ignorar hook de commit | git commit --no-verify -m "message" |
--allow-empty |
Permitir envios vazios | git commit --allow-empty -m "message" |
-s |
Adicionar “Signed-off-by” | git commit -s -m "message" |
▶ Exemplo: Como usar as opções de envio
# Auto-check-in and commit(Applies only to tracked files)
echo "new content" >> README.md
git commit -a -m "Update README"
# Add a signature
git commit -s -m "feat: Add a New Feature"
# Will be added to the submitted information:
# Signed-off-by: Zhang San <zhangsan@example.com>
# Skippre-commitHook
git commit --no-verify -m "WIP: Save as Draft"
# View Submission Details
git show HEAD
(2) Enviar modelo
É possível configurar modelos de commit para garantir que os membros da equipe sigam um formato consistente nas mensagens de commit.
# Create a commit template
cat > .git/commit-template << 'EOF'
# <type>(<scope>): <subject>
#
# typeAvailable values:
# feat, fix, docs, style, refactor, perf, test, chore
#
# subjectRules:
# - Using Imperative Sentences
# - Lowercase the first letter
# - Do not add a period at the end
EOF
# Configuring the Use of Templates
git config commit.template .git/commit-template
# Submit Using a Template
git commit
# It will open the editor,Display template content
5. Modificar e enviar
(1) Modificar o último commit
▶ Exemplo: Modificando a mensagem do commit
# Edit the commit message for the last commit
git commit --amend -m "feat: Add User Login Functionality(After the correction)"
# Output:
# [main d4e5f6g] feat: Add User Login Functionality(After the correction)
# Date: Mon Jan 1 10:00:00 2026 +0800
# 1 file changed, 1 insertion(+)
(2) Adicionar arquivos ao último commit
▶ Exemplo: Adicionando arquivos ausentes
# Suppose you realize after submitting that you've left out a file
git add forgotten-file.txt
# Add to the last commit,Do not modify the commit message
git commit --amend --no-edit
# Or add to and modify the commit message
git commit --amend -m "feat: Add user login functionality and related configurations"
(3) Alterar as informações do autor na submissão
▶ Exemplo: Edição das informações do autor
# Change the author of the last commit
git commit --amend --author="Li Si <lisi@example.com>"
# Edit Submission Date
git commit --amend --date="2026-01-01 10:00:00"
(4) Observações importantes sobre a modificação de envios
graph TB
A[Commit Changes] --> B{Has the commit been pushed??}
B -->|Not pushed| C[Can be safely modified]
B -->|Pushed| D[Forced push required]
D --> E[May affect other developers]
E --> F[Use with caution]
style C fill:#d4edda
style F fill:#f8d7da
⚠️ Aviso importante:
- Modificar apenas os commits que ainda não foram enviados
- As modificações em um commit enviado exigem
git push --force - Os envios forçados podem afetar outros desenvolvedores; por isso, é necessário comunicar-se com antecedência.
- Ao trabalhar em equipe, procure evitar modificar commits que já tenham sido enviados
6. Enviar as melhores práticas
(1) Confirmar de forma atômica
Cada commit deve conter apenas uma alteração lógica:
Melhores práticas:
# Submit1:Add Feature
git add feature.js
git commit -m "feat: Add User Login Functionality"
# Submit2:FixBug
git add fix.js
git commit -m "fix: Fix the login authentication error"
# Submit3:Update Documentation
git add README.md
git commit -m "docs: Update the Login Feature Documentation"
O que não fazer:
# A single commit containing multiple unrelated changes
git add .
git commit -m "Add Feature、FixBug、Update Documentation"
(2) Frequência de envio
- Commits frequentes: Dê passos pequenos e rápidos; faça um commit após concluir cada pequeno recurso
- Commit completo: Cada commit deve representar um estado completo.
- Evite trabalhos incompletos: Não envie código que não funcione
(3) Verificação prévia ao envio
▶ Exemplo: Lista de verificação pré-envio
# 1. View the content to be submitted
git status
# 2. View Specific Changes
git diff
# 3. View the contents of the staging area
git diff --staged
# 4. Submit after verifying that everything is correct
git commit -m "feat: Add a New Feature"
# 5. View Submission Results
git show
(4) Ignorar a configuração do arquivo
Use o arquivo .gitignore para excluir os arquivos que não precisam ser enviados:
# .gitignoreExample
# Dependency Directory
node_modules/
vendor/
# Compilation Output
dist/
build/
*.o
*.class
# IDELayout
.vscode/
.idea/
*.swp
# Environment Configuration
.env
.env.local
# Log Files
*.log
logs/
# Operating System Files
.DS_Store
Thumbs.db
❓ Perguntas Frequentes
P: O que devo fazer se perceber que esqueci de enviar um arquivo após o envio?
R: Use
git addpara adicionar os arquivos que faltam e, em seguida, executegit commit --amend --no-editpara anexá-los ao último commit. Observação: só é possível modificar commits que ainda não tenham sido enviados.
P: Como faço para desfazer meu último commit?
R: Use
git reset --soft HEAD~1para desfazer um commit, mas manter as alterações na área de preparação; usegit reset --mixed HEAD~1para desfazer um commit e devolver as alterações ao diretório de trabalho; usegit reset --hard HEAD~1para descartar completamente as alterações.
P: Em que idioma as informações devem ser enviadas?
R: Recomendamos usar o inglês, já que o Git e a maioria dos projetos de código aberto utilizam o inglês. Para projetos internos da equipe, você também pode usar o chinês, mas certifique-se de manter a consistência.
P: Como faço para visualizar os detalhes de um commit específico?
R: Use
git show <commit-id>para visualizar os detalhes de um commit específico, incluindo os metadados do commit e as diferenças entre os arquivos. Usegit showsem nenhum parâmetro para visualizar o commit mais recente.
P: Por que aparece a mensagem “nada para confirmar” quando tento confirmar?
R: Isso significa que a área de preparação está vazia. Você precisa primeiro usar
git addpara preparar as alterações ou usargit commit -apara preparar automaticamente as alterações nos arquivos rastreados.
📖 Resumo
- O commit é uma operação fundamental do Git que cria um instantâneo de uma versão e registra o histórico do projeto
- Processo de commit: Modificar arquivos → Preparar as alterações → Criar um commit
- Escreva mensagens de commit claras, seguindo as diretrizes do Conventional Commits
- Use opções de commit para melhorar a eficiência: -a para preparar automaticamente as alterações, --amend para modificar um commit
- Para modificar um commit que já foi enviado, é necessário fazer um force push, o que pode afetar outros desenvolvedores.
- Melhores práticas para fazer commits: commits atômicos, commits frequentes e verificações antes do commit
📝 Exercícios
-
Exercício básico: Crie um repositório Git, adicione um arquivo README.md, faça seu primeiro commit com uma mensagem de commit adequada e, em seguida, visualize o histórico de commits.
-
Problema avançado: Simule uma situação em que você descobre que falta um arquivo após o envio. Use a opção
--amendpara anexar o arquivo ao seu último commit e verifique o conteúdo do commit. -
Desafio: Configure um modelo de commit, crie um arquivo de modelo que esteja em conformidade com as diretrizes do Conventional Commits e use esse modelo para fazer um commit, garantindo que a mensagem do commit siga o formato especificado.