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 ostrip
, exceto comentários.verbatim
: não altera a mensagem.scissors
: o mesmo que owhitespace
, exceto que tudo incluindo a linha pontilhada seja truncada caso a mensagem precise ser editada.default
: o mesmo questrip
, caso a mensagem esteja para ser editada. Caso contrariowhitespace
.
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.