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:

100%
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:

  1. Modificar arquivo: Editar um arquivo na área de trabalho
  2. Alterações na área de preparação: Use git add para adicionar alterações à área de preparação
  3. Criar um commit: Use git commit para enviar o conteúdo da área de preparação para o repositório

(3) O objetivo da apresentação


2. Operações básicas de envio

(1) Primeira apresentação

▶ Exemplo: Criando seu primeiro commit

BASH
# 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

BASH
# 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

BASH
# 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:

(2) Padrão de commits convencionais

Atualmente, essa é a convenção mais popular para mensagens de commit, e o formato é o seguinte:

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

<body>

<footer>

Explicação de cada seção:

(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

BASH
# 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:

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 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

BASH
# 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.

BASH
# 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

BASH
# 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

BASH
# 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

BASH
# 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

100%
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:


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:

BASH
# 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:

BASH
# A single commit containing multiple unrelated changes
git add .
git commit -m "Add Feature、FixBug、Update Documentation"

(2) Frequência de envio

(3) Verificação prévia ao envio

▶ Exemplo: Lista de verificação pré-envio

BASH
# 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:

TEXT 📖 Somente leitura
# .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 add para adicionar os arquivos que faltam e, em seguida, execute git commit --amend --no-edit para 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~1 para desfazer um commit, mas manter as alterações na área de preparação; use git reset --mixed HEAD~1 para desfazer um commit e devolver as alterações ao diretório de trabalho; use git reset --hard HEAD~1 para 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. Use git show sem 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 add para preparar as alterações ou usar git commit -a para preparar automaticamente as alterações nos arquivos rastreados.


📖 Resumo


📝 Exercícios

  1. 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.

  2. Problema avançado: Simule uma situação em que você descobre que falta um arquivo após o envio. Use a opção --amend para anexar o arquivo ao seu último commit e verifique o conteúdo do commit.

  3. 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.

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%