Git commit: confirmando e salvando alterações!

Quando você começar a usar o Git, em algum momento você vai esbarrar com o Git commit! Isso porque ele é um dos comandos principais e mais básicos da ferramenta, logo, independente do uso, você vai ouvir falar dele 

Ele é importantíssimo no processo de salvar as alterações que você está fazendo e gravá-las em um histórico do seu repositório. Se você veio do universo do SVN (Apache Subversion), vai perceber que alguns conceitos são bem diferentes por aqui.

Confira o que veremos nesse artigo:

O que é o Git commit e como funciona?

O Git commit permite que você crie um commit, ou seja, você consegue guardar o estado do seu repositório naquele momento. Existem diferentes estratégias para fazer commits, mas a ideia principal é que a cada ponto em que o seu código esteja funcionando com uma nova pequena funcionalidade, exista um commit. 

Dessa forma, ao longo do tempo, você vai conseguir ver uma “história” do seu repositório e o que aconteceu para que chegasse do jeito que está hoje. Um commit, além de mostrar um snapshot do seu repositório, tem outros metadados, como autoria, uma mensagem, timestamp, entre outros. 

Git commit vs SVN commit: quais as diferenças?

O commit no Git e no SVN são bem diferentes! Para entender, as diferenças começam a partir do ponto em que o SVN é totalmente centralizado enquanto o Git é distribuído. 

No SVN, um commit representa fazer uma cópia do seu trabalho para o repositório central. Isso significa que um commit vai realizando as mudanças desde o repositório SVN local até o repositório SVN central. Enquanto no Git, ele não força você a interagir com o repositório remoto, até que você queira. Ou seja, você consegue fazer commits no seu repositório local e não influencia os outros repositórios nesse momento. 

Outra diferença é o que o commit representa em cada plataforma. No SVN, o commit guarda as diferenças em comparação aos arquivos originais. Enquanto isso, no Git é registrado todo o conteúdo dos arquivos em cada commit. Esse é um dos motivos que torna o Git mais rápido comparado ao SVN, já que a versão completa do arquivo já está disponível, enquanto no SVN ela precisa ser “montada” a partir das diferenças entre eles.

Diferenças entre o Git Commit e o SVN commit

Opções para usar com Git Commit

Defina sua mensagem com a opção -m <mensagem>

Você consegue incluir uma mensagem no seu commit. Tente usar descrições objetivas e simples para que seu time, e até você no futuro, consigam entender o que aquele commit faz. Basta usar o seguinte comando:

git commit -m "Aqui vai uma mensagem"

Inclua todos os arquivos modificados com -a

Com esse comando, você incluirá automaticamente no seu commit todos os arquivos modificados. Ou seja, você pulará o passo de adicionar os arquivos para a área de staging e irá direto para a área de commit. Entretanto, novos arquivos, que ainda não são acompanhados pelo git, não serão incluídos. Você pode usar esse comando junto com a opção de mensagem, dessa forma:

git commit -am "Aqui vai uma mensagem"

Reescreva o último commit com –amend

Se você já fez um commit e esqueceu de adicionar algum arquivo ou alteração ou até mesmo quer trocar a mensagem do commit, o amend é a melhor opção. Mas tome cuidado, o amend não só altera o último commit, mas o substitui totalmente pelo que você está criando agora. Tem duas formas de usar o amend. Independentemente de qual você use, se você quiser adicionar alterações de arquivos, faça isso antes de usar esses comandos (você precisa usar o git add para isso):

  • Com alteração da mensagem:
git commit --amend -m "Aqui vai uma mensagem" 
  • Sem alteração da mensagem. Nesse caso você usa a opção –no-edit para que a substituição do commit aconteça sem a necessidade de editar nada do comando.
git commit --amend --no-edit

Outro cuidado que você deve tomar, é evitar ao máximo usar o amend quando o último commit já está no repositório remoto, ou seja, já está público e pode ter sido usado como referência para outras pessoas. Fazer um amend nesse caso pode causar muita confusão e também fica mais complexo arrumar para outras pessoas que já tiverem usado o commit antigo. Só use, caso você tenha extrema necessidade e, se fizer, comunique todas as pessoas que usarem esse repositório.

Criando commits em dois passos

Vamos fazer o commit mais simples nesse exemplo. Depois que você já tiver feito todas as alterações nos seus arquivos, você pode fazer direto:

git commit -am "Mensagem do seu commit"

E caso você tenha arquivos novos, não trackeados pelo Git ainda, você vai precisar rodar dois comandos:

git add .
git commit -m "Mensagem do seu commit"

O git add é para que você adicione todos os arquivos para a área de staging, para que, aí sim, você consiga fazer o seu commit. Pronto! Você fez o seu primeiro commit! 

Como desfazer commits?

Existem duas principais ideias quando queremos desfazer um commit, que podem ser:

  • se o commit já estiver no ambiente remoto. Nesse caso, desfazê-lo pode causar grandes problemas para outras pessoas programadoras que colaboram nesse repositório;
  • se o commit só estiver no ambiente local. Essa opção é bem mais segura.

Vamos apresentar algumas possibilidades que você tem para desfazer um commit. Para entender melhor cada um dos comandos, você pode ler mais sobre no post específico. Algumas das possibilidades são:

  • git revert: é a forma mais segura de “desfazer” um commit, pois ele não apaga o commit do histórico. O que ele faz é pegar as alterações do commit que você quer reverter e criar um novo commit com essas alterações desfeitas. A grande vantagem é que ele não altera o histórico de commits do seu repositório;
  • git reset: se você realmente precisa apagar um commit, muitas vezes por conter alguma informação mais sensível, você pode usar o git reset. Se o commit já estiver no ambiente remoto, lembre-se sempre de comunicar o time;
  • git reflog: com esse comando você consegue ter acesso aos logs de referências, também conhecidos como reflogs, de cada um dos commits. A partir disso, você consegue deletar ou realizar outras operações com cada uma das referências.

Agora que você já sabe o que é um commit e as variações que você pode usar desse mesmo comando, dá para começar a entender a importância do histórico nos seus projetos e repositórios. Principalmente, se mais de uma pessoa desenvolvedora faz alterações nesse mesmo projeto. 

Reforçamos ainda a importância de boas mensagens de commit! Mais importante do que ter um histórico, é conseguir entender esse histórico. Por isso, a importância das suas mensagens serem explícitas, simples e objetivas.

Continue estudando mais comandos Git, e descubra o git push, outro comando muito importante!