W3docs

git commit

Saiba o que é o git commit, como funciona e quais são as opções mais usadas neste tutorial de Git.

O comando git commit registra as alterações que você preparou (staged) no histórico do repositório como um novo snapshot. Cada commit é um ponto permanente e nomeado ao qual você pode retornar, comparar ou compartilhar com outras pessoas. Esta página explica o que é um commit, como o fluxo de trabalho stage-then-commit funciona, as opções mais úteis, como escrever boas mensagens de commit e como o modelo de snapshots do Git difere de sistemas mais antigos como o SVN.

Definição

O comando git commit salva todas as alterações atualmente preparadas (staged) do projeto. Os commits são criados para capturar o estado atual de um projeto. Os snapshots confirmados são considerados versões seguras de um projeto porque residem no seu histórico local e o Git não os alterará silenciosamente. Antes de executar o git commit, você usa o comando git add para preparar (stage) as alterações que o commit irá armazenar.

Um commit é composto por três elementos:

  • Um snapshot de cada arquivo rastreado no momento do commit (não um diff — veja Snapshots, não diferenças abaixo).
  • Metadados: o autor, um timestamp e a mensagem que você escreve.
  • Um ponteiro pai para o commit anterior, que é como o Git constrói um histórico que você pode navegar com git log.

Cada commit é identificado por um hash SHA-1 único de 40 caracteres (por exemplo, 9fceb02...), que pode ser abreviado para os primeiros sete caracteres ao referenciá-lo.

Como funciona

Os snapshots do Git são confirmados no seu repositório local. O Git permite acumular commits localmente em vez de enviar alterações imediatamente para um servidor central. Você os publica posteriormente com git push. Essa separação oferece diversas vantagens:

  • Dividir uma funcionalidade em commits para que cada etapa seja pequena e revisável.
  • Agrupar alterações relacionadas em um único commit autocontido.
  • Limpar o histórico local (squashing, reformulação, reordenação) antes de compartilhá-lo.
  • Trabalhar offline — você pode fazer commit num avião e enviar quando se reconectar.

O ciclo de vida típico de uma alteração é diretório de trabalho → área de preparação (staging) → commit: você edita arquivos, executa git add para preparar as partes desejadas e, em seguida, git commit para registrá-las. Tudo o que você não preparar permanece no diretório de trabalho e fica fora do commit.

Opções comuns

git commit -aConfirma um snapshot de todas as alterações no diretório de trabalho. Apenas modificações em arquivos rastreados são incluídas.
git commit -m "mensagem do commit"Cria um commit com a mensagem de commit fornecida. Por padrão, o git commit abre o editor de texto configurado localmente para que você insira a mensagem.
git commit -am "mensagem do commit"Combina as opções -a e -m para preparar todos os arquivos rastreados modificados e criar um commit com uma mensagem inline.
git commit --amendModifica o último commit. As alterações preparadas são adicionadas ao commit anterior, e o editor é aberto para que você possa alterar a mensagem.
Aviso

git commit -a (e -am) apenas prepara arquivos que o Git já está rastreando. Arquivos totalmente novos nunca são detectados automaticamente — você deve executar git add neles primeiro. Execute git status em caso de dúvida.

Salvando alterações com um commit

No exemplo a seguir, temos o arquivo w3docs.txt com conteúdo alterado no branch atual. Para confirmar o snapshot preparado do arquivo, primeiro você deve prepará-lo com o comando git add.

Comando git add

git add w3docs.txt

Executar git add moverá o arquivo w3docs.txt para a área de preparação (staging area) do Git. Use o comando git status para ver o resultado.

git status

git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: w3docs.txt

O resultado indica que w3docs.txt será salvo no próximo commit. O commit é criado executando:

Git commit

git commit

Executar git commit abre um editor de texto (que pode ser configurado via git config) solicitando uma mensagem de log do commit e uma lista do que está sendo confirmado:

git commit no editor

# Enter the commit message of your changes. Lines that start
# with '#' will be ignored, an empty message breaks off the commit.
# On branch master
# Changes needed to be committed:
# (use "git reset HEAD ..." to unstage)
#
#modified: w3docs.txt

O formato convencional de commit do Git resume a alteração na primeira linha em menos de 50 caracteres, seguida por uma linha em branco e uma explicação detalhada. Por exemplo:

Mensagem do git commit

Change the message displayed by w3docs.txt

- Update the sayHello() function to get the username
- Change the sayGoodbye() function to a more welcoming message

A primeira linha é o assunto (subject); o restante é o corpo (body). Salve e feche o editor para finalizar o commit.

Escrevendo uma boa mensagem de commit

Uma mensagem clara torna o histórico pesquisável e facilita as revisões. A convenção amplamente utilizada é:

  • Mantenha a linha de assunto com menos de 50 caracteres e escreva-a no modo imperativo ("Adicionar formulário de login", não "Adicionado" ou "Adiciona").
  • Não termine o assunto com ponto final.
  • Deixe uma linha em branco entre o assunto e o corpo — muitas ferramentas dependem disso.
  • Quebre o corpo em torno de 72 caracteres e explique por que a alteração foi feita, não apenas o que mudou.

Confirmando com uma mensagem inline

Para alterações pequenas e de propósito único, geralmente você ignora o editor e passa a mensagem diretamente:

git commit -m "Update greeting in w3docs.txt"

Use git commit -am "..." para preparar todos os arquivos rastreados modificados e confirmar em uma única etapa.

Como atualizar (alterar) um commit

git commit --amend substitui o commit mais recente em vez de adicionar um novo. É útil quando você esqueceu de preparar um arquivo ou deseja corrigir um erro de digitação na última mensagem. O editor é aberto preenchido com a mensagem anterior:

git add e git commit

git add w3docs.txt
git commit --amend

Para alterar apenas a mensagem sem abrir o editor:

git commit --amend -m "Corrected commit message"
Aviso

Alterar (amend) reescreve o último commit e atribui a ele um novo hash. Altere apenas commits que você ainda não enviou e compartilhou — reescrever histórico público força todos os outros a reconciliar suas cópias. Para desfazer um commit que ainda não foi compartilhado, use git reset.

Git commit vs svn commit

SVN é um modelo de aplicação centralizado, enquanto o Git é um modelo de aplicação distribuído. O commit do SVN envia alterações do cliente local para um repositório centralizado. No Git, os snapshots são confirmados no repositório local. Os commits do Git podem ser enviados para repositórios remotos arbitrários.

Snapshots, não diferenças

O Git é baseado em snapshots, enquanto o SVN rastreia diferenças em arquivos. Um svn commit registra um diff que é aplicado ao arquivo original no repositório. O Git registra o estado completo do projeto em cada commit. Ao salvar o estado do projeto, o Git tira um snapshot dos arquivos atuais e armazena uma referência a esse snapshot. Se um arquivo não foi alterado, o Git não o armazena novamente, o que otimiza o armazenamento.

diferença de arquivos git

Snapshots

Comandos relacionados

  • git add — prepare alterações antes de confirmá-las.
  • git status — veja o que está preparado e o que não está.
  • git log — navegue pelo histórico de commits que você fez.
  • git reset — despreparar arquivos ou desfazer um commit.
  • git push — publique seus commits locais em um repositório remoto.

Prática

Prática
Quais são as características e opções do comando 'git commit'?
Quais são as características e opções do comando 'git commit'?
Was this page helpful?