Salvando modificações com git commit

Guia básico

Postado por Rafael Brandão em Mar. 12, 2024

Foram realizados modificações no projeto na área de trabalho e agora chegou a hora de salvar no repositório local. Neste artigo vamos abortar o comando git commit e como usá-lo no dia a dia.

Commit

é um verbo em inglês, que pode ter alguns significados em português:

  • comprometer: comprometer-se com algo ou alguém. Tornar-se responsável.
  • entregar/mandar/enviar: dar a algo ou alguém. Fazer chegar algo a algum lugar.
  • dentre outros.

Commit no Git

No Git, commit tem o significado de salvar as modificações realizadas da área de trabalho para o repositório local, ou seja, você consegue guardar o estado do seu repositório naquele momento, tendo diferentes versões do projeto. Os commits são registrados de forma permanente, possibilitando o retorno a versões anteriores do código.

Como funciona

Considere que temos um repositório Git, com um arquivo OlaMundo.txt adicionado na área de preparação(staging area) e pronto para ser salvo no repositório local

On branch master 

No commits yet 

Changes to be committed: 
  (use "git rm --cached <file>..." to unstage) 
        new file: OlaMundo.txt

ao digitar no terminal o comando

git commit

Por padrão, git commit abre o editor de texto configurado, com o arquivo COMMIT_EDITMSG e solicita que uma mensagem de commit seja informada

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# new file: OlaMundo.txt 
#

Quando digitado a mensagem, salvo e fechado o arquivo no editor, o commit será realizado

Adiciona texto em OlaMundo.txt
# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# new file: OlaMundo.txt 
# 

As linhas com comentários são ignoradas e o commit com mensagem vazia é abortado. Ao visualizar a área de preparação, nenhum arquivo para commit

On branch master 
nothing to commit, working tree clean

Identificador único

Cada commit tem um identificador único, chamado de hash SHA, e fica salvado no registro(log) do repositório. Quando verificado, o commit anterior foi salvo com um identificador único b59848892abc01cdd9b26295aab7c343fc0cc25f. Com esse identificador é possível referencia-lo para consultas ou reversões

commit b59848892abc01cdd9b26295aab7c343fc0cc25f (HEAD -> master) 
Author: José da Silva Santos <josedasilvasantos@git-commit-article.com> 
Date: Sun Mar 10 13:12:50 2024 -0300 
    Adiciona texto em OlaMundo.txt

Autor do commit

As informações do autor do commit são extraídas das propriedades user.name e user.email definidos na configuração. Para cenários mais complexos, consulte informações do commit.

Commit direto

É possível realizar o commit, sem que as modificações estejam incialmente na área de preparação. Para adicionar todas as modificações realizadas no projeto direto e ignorando os arquivos não rastreados(untracked files)

git commit -a 
# ou 
git commit -all

Ao salvar e fechar o arquivo de mensagem do commit

Atualiza texto em OlaMundo.txt
# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# On branch master 
# Changes to be committed: 
# modified: OlaMundo.txt 
# 

é adicionado todas as modificações no projeto automaticamente na área de preparação e salvas no repositório local.

Apesar do Git oferecer a realização do commit dessa maneira, o recomendado é que não pule a etapa de adicionar os arquivos modificados na área de preparação. Para que somente os arquivos que deseja realmente estejam no commit.

Commit verboso

Para realizar o commit de maneira verbosa, ao digitar o comando

git commit -v 
# ou 
git commit -verbose

o arquivo de mensagem do commit é aberto mostrando o que foi modificado

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# On branch master 
# Changes to be committed: 
# modified: OlaMundo.txt 
# 
# ------------------------ >8 ------------------------ 
# Do not modify or remove the line above. 
# Everything below it will be ignored. 
diff --git a/OlaMundo.txt b/OlaMundo.txt 
index 56a6051..d8263ee 100644 
--- a/OlaMundo.txt 
+++ b/OlaMundo.txt 
@@ -1 +1 @@ 
-Olá Mundo 
\ No newline at end of file 
+Olá Mundo! 
\ No newline at end of file

São mostradas as diferenças entre o commit que está no HEAD (ramo atual) e o que será feito no commit atual. Para ajudar o usuário a descrever o commit, lembrando quais as modificações que o commit possui

Atualiza texto adiciona exclamação em OlaMundo.txt 
# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# On branch master # Changes to be committed: 
# modified: OlaMundo.txt 
# 
# ------------------------ >8 ------------------------ 
# Do not modify or remove the line above. 
# Everything below it will be ignored. 
diff --git a/OlaMundo.txt b/OlaMundo.txt 
index 56a6051..d8263ee 100644 
--- a/OlaMundo.txt 
+++ b/OlaMundo.txt 
@@ -1 +1 @@ 
-Olá Mundo 
\ No newline at end of file 
+Olá Mundo! 
\ No newline at end of file

Ao salvar o arquivo de mensagem do commit

[master e9e9ed2] Atualiza texto adiciona exclamação em OlaMundo.txt 
  1 file changed, 1 insertion(+), 1 deletion(-)

Como os comentários, o resultado da comparação entre as diferenças dos arquivos, não farão parte da mensagem do commit.

commit e9e9ed20711fa3819d885ec3dfdc4d8691d17b7f (HEAD -> master) 
Author: José da Silva Santos <josedasilvasantos@git-commit-article.com> 
Date: Sun Mar 10 14:42:26 2024 -0300 
    Atualiza texto adiciona exclamação em OlaMundo.txt

Atualizar commit anterior

A opção --amend modifica o último commit realizado, sem a necessidade de criar um novo commit.

git commit --amend
Atualiza texto adiciona exclamação em OlaMundo.txt 
# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# Date: Sun Mar 10 14:49:23 2024 -0300 
# 
# On branch master 
# Changes to be committed: 
# modified: OlaMundo.txt 
#

Abre o editor de texto configurado no sistema e solicita a mudança da mensagem de commit especificada no commit anterior, ou seja, não está criando um novo commit, mas editando o último commit.

Evite usar o --amend quando o último commit já se encontra no repositório remoto, ou seja, disponível para outros desenvolvedores usa-lo como referência para suas próprias modificações. Caso use-o, comunique aos outros desenvolvedores do repositório e ajuste possíveis conflitos.

Commit com mensagem direto

é possível realizar o commit direto com mensagem, usando as opções

git commit -m "Atualiza texto em OlaMundo.txt" 
# ou 
git commit --message="Atualiza texto em OlaMundo.txt"

Dessa maneira, é criado de imediato um commit de todas as modificações preparadas e gera uma mensagem de commit.

Combinando as opções -a(commit direto) e -m(mensagem direta)

git commit -am "Atualiza texto em OlaMundo.txt"

Todas as modificações no projeto serão enviadas para área de preparação e depois salva o commit no repositório local com a mensagem informada.

Adicionando mensagem com uma ação de limpeza

A opção --cleanup= define como a mensagem deve ser limpa antes de realizar o commit. Os tipos de limpezas são:

  • strip: remove as linhas vazias, espaços finais e comentários .
  • whitespace: o mesmo que o strip , exceto comentários.
  • verbatim: não altera a mensagem.
  • scissors: o mesmo que o whitespace, exceto que tudo incluindo a linha pontilhada seja truncada caso a mensagem precise ser editada.
  • default: o mesmo que strip, caso a mensagem esteja para ser editada. Caso contrario whitespace .

Boas práticas de commit

Mensagens de commit

O Git não exige que as mensagens de commit sigam alguma restrição de formatação, porém o formato recomendado é resumir a mensagem para caber na primeira linha com limite de 50 caracteres. Adicionar uma linha em branco. E então escrever uma explicação detalhada do que foi modificado.

Atualiza o texto em OlaMundo.tx 

- Adiciona exclamação 
- Adiciona texto adicional de saudação

Fazendo uma analogia a um e-mail, a primeira linha da mensagem seria semelhante ao assunto do e-mail. E o restante o corpo da mensagem. A mensagem está em uma linguagem imperativa no tempo presente. Evite criar mensagens muito grandes, no máximo 150 caráteres.

Nunca inclua segredos como senhas, chaves ou tokens de segurança na mensagem. Não inclua nada que não gostaria que fosse tornado público.

Código

é recomendado que ao implementar sua funcionalidade, sejam realizados pequenos commits com mensagens claras. Todo código para commit deve funcionar perfeitamente no repositório. Isso colabora para um gestão eficiente das versões.

Contribuindo

Muitos projetos têm normas para serem seguidas em seus projetos, muitas vezes descritas no arquivo CONTRIBUTING.md . Neste caso, siga as normas do projeto.

Acompanhamento de tarefas

Muitos projetos usam sistemas para desenvolvimento de aplicações, como o Jira, que tem um identificador para cada tarefa. Neste caso, a recomendação é incluir o identificador da tarefa para referência.

[Projeto-1] Atualiza texto em OlaMundo.txt

Para outras convenções de commit, acesse convenção de commits e versionamento Semântico. Para uma lista mais extensa de opções disponíveis para o comando git commit, consulte a documentação do Git.

Originalmente publicado pelo autor em DIO.

Referências