Close

Git commit

O comando git commit captura um instantâneo das mudanças preparadas do projeto no momento. Os instantâneos com commit podem ser considerados versões "seguras" de um projeto, o Git nunca os altera, a menos que você peça a ele. Antes da execução de git commit, o comando git add é usado para promover ou "preparar" alterações no projeto que são armazenadas em uma confirmação. Estes dois comandos, git commit e git add, estão entre os mais usados.


Git commit versus SVN commit


Embora compartilhem o mesmo nome, o git commit não tem semelhanças com o svn commit. Este termo compartilhado pode ser motivo de confusão para os iniciantes no Git que têm experiência em svn, e é importante enfatizar a diferença. Comparar o git commit com o svn commit é comparar um modelo de aplicação centralizado (svn) com um modelo de aplicação distribuído (Git). No SVN, um commit realiza mudanças a partir do cliente SVN local até um repositório SVN compartilhado e centralizado. No Git, os repositórios são distribuídos e o commit dos instantâneos é feito no repositório local, o que não requer interação alguma com outros repositórios do Git. Os commits do Git podem ser realizados mais tarde em repositórios remotos arbitrários.

Como funciona


Em um nível alto, o Git pode ser considerado um utilitário de gerenciamento de cronograma. Os commits são as unidades estruturais de um cronograma de projeto Git. Podem ser considerados instantâneos ou marcos ao longo do cronograma de um projeto Git. São criados com o comando git commit para capturar o estado de um projeto naquele momento. O commit dos instantâneos do Git sempre é feito no repositório local, muito diferente do SVN, no qual se faz o commit de uma cópia do trabalho no repositório central. Já o Git não força você a interagir com o repositório central até que você esteja pronto. Assim como a área de staging é um intermediário entre o diretório de trabalho e o histórico do projeto, o repositório local de cada desenvolvedor é um intermediário entre as respectivas contribuições e o repositório central.

Assim, o modelo de desenvolvimento básico para os usuários do Git muda. Em vez de fazer uma alteração e seu commit no repositório central, os desenvolvedores do Git podem acumular commits nos repositórios locais, o que apresenta muitas vantagens em relação à colaboração no estilo SVN: facilita a divisão de uma função em commits menores, mantém commits relacionados agrupados e limpa o histórico local antes de as publicar no repositório central. Assim, os desenvolvedores também podem trabalhar em um ambiente isolado, adiando a integração até estarem em um ponto conveniente para mesclar com outros usuários. Embora o isolamento e integração adiada sejam benéficos em caráter individual, é de interesse da equipe integrar com frequência e em unidades pequenas. Para mais informações sobre as melhores práticas de colaboração da equipe Git, leia sobre como as equipes estruturam os próprios fluxos de trabalho do Git.

Git Branch
Material relacionado

Git Branch

Logotipo do Bitbucket
VER SOLUÇÃO

Aprenda a usar o Git com o Bitbucket Cloud

Instantâneos, não diferenças


Além das distinções práticas entre o SVN e o Git, a implementação subjacente também segue filosofias de design com total divergência. Enquanto o SVN monitora as diferenças de um arquivo, o modelo de controle de versão do Git é baseado em instantâneos. Por exemplo, um commit do SVN consiste em uma diferença em comparação ao arquivo original adicionado ao repositório. Por outro lado, o Git registra todo o conteúdo de cada arquivo em cada commit.

Tutorial do Git: Instantâneos, não diferenças

Isto torna muitas operações de Git bem mais rápidas do que o SVN, uma vez que uma versão específica de um arquivo não precisa ser "montada" a partir das diferenças, a revisão completa de cada arquivo fica disponível de imediato no banco de dados interno do Git.

O modelo de instantâneo do Git tem um impacto mais profundo em quase todos os aspectos do modelo de controle de versão, afetando tudo, desde as ferramentas de branch e mesclagem, até os fluxos de trabalho colaborativos.

Opções comuns


git commit

Faça o commit do instantâneo preparado, o que abre um editor de texto solicitando a você uma mensagem de commit. Depois de escrever a mensagem, salve o arquivo e feche o editor para criar o commit real.

git commit -a

Faça o commit de uma captura de tela de todas as alterações no diretório de trabalho, apenas com as modificações nos arquivos monitorados (aqueles que foram adicionados com git add em algum momento do histórico).

git commit -m "commit message"

Um comando de atalho que cria de imediato um commit com uma mensagem de commit transmitida. Por padrão, git commit abre o editor de texto configurado no local e solicita que uma mensagem de commit seja escrita. Transmitir a opção -m vai pular a solicitação do editor de texto em favor de uma mensagem integrada.

git commit -am "commit message"

Um comando de atalho de usuário experiente que combina as opções -a e -m. Essa combinação cria de imediato um commit de todas as alterações preparadas e gera uma mensagem de commit integrada.

git commit --amend

Essa opção adiciona outro nível de funcionalidade ao comando commit. A transmissão dessa opção modifica o último commit. Em vez de criar um novo commit, as mudanças preparadas são adicionadas ao commit anterior. Esse comando abre o editor de texto configurado no sistema e solicita a mudança da mensagem de commit especificada mais cedo.

Exemplos


Salvar alterações com um commit

O exemplo a seguir supõe que você editou algum conteúdo em um arquivo chamado hello.py na ramificação atual e está pronto para fazer o commit no histórico do projeto. Primeiro, você precisa preparar o arquivo com git add, depois, pode fazer commit do instantâneo preparado.

git add hello.py

Esse comando adiciona hello.py à área de staging do Git. A gente pode examinar o resultado desta ação usando o comando git status.

git status
On branch main
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
   new file: hello.py

O novo arquivo verde resultante: hello.py indica que hello.py vai ser salvo com o próximo commit. A partir do commit, ele é criado com a execução de:

git commit

Assim vai ser aberto um editor de texto (personalizável pelo git config) solicitando uma mensagem de registro do commit, junto com uma lista do que está sendo objeto do commit:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch main
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
#modified: hello.py

O Git não exige que as mensagens de commit sigam restrições específicas de formatação, porém o formato canônico é resumir o commit todo na primeira linha em menos de 50 caracteres. deixar uma linha em branco e, então, escrever uma explicação detalhada do que está sendo alterado. Por exemplo:

Change the message displayed by hello.py

- Update the sayHello() function to output the user's name
- Change the sayGoodbye() function to a friendlier message

É comum usar a primeira linha da mensagem de commit como linha de assunto, semelhante a um e-mail. O resto da mensagem de registro é o texto, usado para dar informações sobre o conjunto de alterações do commit. Muitos desenvolvedores também gostam de escrever as mensagens de commit no presente. Assim, elas soam mais como ações no repositório, o que torna muitas das operações de reescrita do histórico mais intuitivas.

Como atualizar (emendar) um commit


Para continuar o exemplo do hello.py acima, a gente vai fazer mais atualizações em hello.py e executar o seguinte:

git add hello.py
git commit --amend

Isso abre outra vez o editor de texto configurado. No entanto, desta vez ele é preenchido com a mensagem de commit inserida antes. Isso indica que a gente não está criando um novo commit, mas editando a última.

Resumo


O comando git commit é uma das funções principais do Git. Antes de usar o comando git add é necessário selecionar as alterações que vão ser preparadas para o próximo commit. Então, git commit é usado para criar um instantâneo das alterações preparadas em um cronograma de um histórico de projetos do Git. Saiba mais sobre o uso de git add na página de acompanhamento. O comando git status pode ser usado para explorar o estado da área de staging e o commit pendente.

O modelo de commit do SVN e do Git são muito diferentes, porém são confundidos por causa da terminologia em comum. Se você vai usar o Git, mas já usou o SVN, é bom saber que no Git, os commits são simples e devem ser usados com frequência. Enquanto os commits no SVN são uma operação complexa e fazem solicitação remota, os commits do Git são feitos no local e com um algoritmo mais eficiente.


Compartilhar este artigo
Próximo tópico

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Pessoas colaborando usando uma parede cheia de ferramentas

Blog do Bitbucket

Ilustração do DevOps

Caminho de aprendizagem de DevOps

Demonstrações de funções no Demo Den com parceiros da Atlassian

Como o Bitbucket Cloud funciona com o Atlassian Open DevOps

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up