Git Commit: uma aula magistral


0
Laptop em um fundo azul mostrando um prompt de comando do Linux.
fatmawati achmad zaenuri/Shutterstock.com
O comando Git commit armazena cópias das alterações de seu diretório de trabalho em seu repositório Git. Mas também pode ser usado para corrigir commits existentes e para reverter commits também.

Um requisito básico de qualquer sistema de controle de versão é armazenar diferentes versões de arquivos para você. No Git, o comando que faz isso é commit. Aqui está tudo o que você precisa saber.

O que é um commit no Git?

Commits são as séries de instantâneos feitos ao longo do ciclo de vida de um projeto que compõem seu histórico de desenvolvimento. Commits são o que nos permite extrair uma versão do projeto como era em diferentes pontos no passado. Por que isso é importante?

Os sistemas de controle de versão (VCSs) são mais comumente usados ​​com código-fonte de software e projetos de desenvolvimento. Mas eles podem ser usados ​​com sucesso com qualquer coleção de arquivos de texto, como arquivos Markdown contendo capítulos de um livro.

Você pode não querer que todos os arquivos em seus diretórios de projeto sejam manipulados pelo VCS, então você precisa ser capaz de nomear os arquivos que deseja que sejam controlados por versão. Isso os adiciona à exibição de controle de versão do projeto. Eles serão monitorados quanto a mudanças.

Outra maneira de conseguir isso é usar uma lista de ignorados. Isso informa ao Git quais arquivos, diretórios ou tipos de arquivos ele deve sempre ignorar.

Com o tempo, à medida que novos arquivos são adicionados ao projeto, alguns precisarão ser adicionados ao sistema de controle de versão. No Git, isso é tratado pelo add comando. Na verdade, o add comando faz serviço duplo, como veremos.

Para manter um histórico das mudanças que foram feitas no projeto, você pedirá periodicamente ao Git para armazenar um instantâneo do estado do projeto, usando o comando commit comando. É aqui que o add comando reaparece em nosso fluxo de trabalho. Nós usamos o add comando para dizer ao Git qual mudado arquivos que queremos incluir no instantâneo. Então nós usamos commit para dizer ao Git para criar o instantâneo.

Configurando o comando commit

As informações sobre o commit são armazenadas com ele, para que seja sempre possível saber quem fez o commit, quando e o que o commit contém. Alguns desses metadados são capturados no momento do commit, como a mensagem de commit.

Os metadados relativos à identidade dos membros da equipe de desenvolvimento podem ser configurados por cada usuário, para evitar o fornecimento repetido da mesma informação.

Para definir seu nome globalmente para todos os repositórios em seu computador, use este comando.

git config --global user.name "Dave McKay"

Configurando o nome de usuário global do Git

Para verificar se seu nome foi definido, use este comando.

git config --global user.name

Verificando o nome de usuário global do Git

Se você precisar usar um nome diferente em um determinado repositório, vá para o diretório do projeto e use o mesmo comando sem o --global opção.

git config user.name "McKay, David"
git config user.name

Configurando um nome de usuário Git específico do repositório

Agora temos um nome de usuário padrão diferente para este repositório e nosso nome global ainda é usado para outros repositórios.

De maneira semelhante, podemos definir um endereço de e-mail globalmente ou para um único repositório, incluindo ou omitindo o --global opção.

git config user.email "dave@phony-domain.com"
git config --global user.email "dave@fake-domain.com"
git config user.email
git config --global user.email

Definindo endereços de e-mail de usuário padrão do Git globais e específicos do repositório

Essas configurações são mantidas em arquivos de configuração. As configurações globais do Git são mantidas em “~/.gitconfig” e as configurações específicas do repositório são mantidas no arquivo “.git/config” do repositório.

O commit O comando faz referência e usa esses valores à medida que opera.

Usando o comando commit

O uso básico do commit O comando é pegar os arquivos que estão na área de teste, conhecida como índice, e armazená-los como um commit na ramificação atual do repositório.

Um compromisso básico

Temos um projeto com um arquivo alterado. vamos usar o add comando para preparar o arquivo e confirmá-lo. Estamos usando o -m (commit message) para que possamos fornecer uma breve descrição do propósito das alterações. Se não usarmos essa opção, será solicitada uma mensagem de confirmação à medida que a confirmação ocorre. É mais conveniente adicionar um na linha de comando.

git add jibber.c
git commit -m "Updated help text"

Preparando e confirmando um único arquivo

Se usarmos o git log podemos revisar os detalhes dos commits, em ordem cronológica, com o commit mais recente no topo da lista.

git log

Verificando o log do repositório Git

Os commits são exibidos em less.

O commit mais recente no topo do log do Git

O commit foi marcado com o nome e o endereço de e-mail que fornecemos anteriormente, e nossa mensagem de commit também está registrada.

Arquivos de preparo automático

A preparação de muitos arquivos pode demorar um pouco. Uma abordagem diferente é usar o -A (todas) opção com add.

Isso prepara automaticamente todos modificado arquivos junto com todos atualmente não rastreado arquivos. A preparação de arquivos não rastreados respeita as configurações em seu arquivo “.gitignore”. O Git não testará os arquivos que você disse que não deseja incluir. Finalmente, os arquivos no índice que não estão mais no diretório de trabalho são removido do índice.

Claramente, o -A opção pode fazer com que muita coisa aconteça de uma só vez. O --dry-run A opção fornece uma visualização das alterações sem realmente executá-las.

git add -A --dry-run

Usando --dry-run para visualizar os arquivos que serão preparados e removidos

Em nosso exemplo, ele preparará dois arquivos existentes modificados e dois novos arquivos. Vamos em frente e usar o -A opção antes de usarmos o commit comando.

git add -A
git commit -m "Enhanced parsing"

Confirmando arquivos alterados e recém-criados, depois de usar a opção add -A

Podemos ver que ao todo quatro arquivos foram alterados. Dois deles são os arquivos recém-criados, que estão listados.

Encenação e Compromisso ao Mesmo Tempo

O commit comando tem uma letra minúscula -a (todas) opção. Isso executa a preparação e a confirmação de arquivos em uma etapa.

O commit -a estágios de opção e commits modificados existir arquivos, e remove arquivos do índice se eles tiverem sido removidos de seu diretório de trabalho. Isto não preparar automaticamente arquivos não rastreados.

Como o add comando, o comando commit tem um --dry-run opção que permite visualizar suas ações antes de executá-lo.

git commit -a --dry-run

Usando a opção commit -a para visualizar as alterações sem executá-las

Agora vamos executar o comando.

git commit -a --dry-run

Usando a opção commit -a para preparar e confirmar em uma etapa

Os arquivos são preparados e confirmados para nós.

Comprometendo-se com um ramo diferente

Se você fez algumas alterações nos arquivos em seu diretório de trabalho, percebe que não fez o checkout da ramificação correta, você precisa que suas alterações sejam confirmadas na ramificação correta sem afetar a ramificação atual.

O Git não tem um comando para confirmar em um branch diferente. Mas você pode corrigir essa situação com um pouco de destreza do Git.

Usaremos o Git stash comando para fazer uma cópia das alterações. Em seguida, verificaremos o branch correto e aplicaremos as alterações do stash. Para aplicar as alterações ocultas, estamos usando o pop comando em vez do apply comando. O pop O comando aplica as alterações e também as remove do stash.

Fizemos algumas alterações em nosso repositório new-parser filial. Deveriam ter sido feitos no classic-parser filial.

git stash
git checkout classic-parser
git stash pop

Stashing alterações, check-out de uma ramificação e aplicação das alterações do stash

Agora podemos realizar um commite atualize esta ramificação.

git commit -a -m "Added pre-parser functions"

Confirmando as alterações que foram recuperadas do stash

Se voltarmos ao new-parser branch, podemos ver que está atualizado, o que significa que as alterações foram removidas do seu diretório de trabalho e seu repositório e arquivos estão sincronizados.

git checkout new-parser
git status

Verificando o estado de uma ramificação para garantir que ela esteja atualizada

RELACIONADO: Como atualizar e manter ramificações separadas do Git

Fazendo alterações nos commits

Se você precisa melhorar sua mensagem de commit—talvez tenha detectado um erro de digitação nela—ou você esqueceu de preparar um arquivo que deveria ter sido incluído no commit, você pode usar o comando --amend opção de consertar as coisas. A ressalva é que isso não deve ser usado em commits que foram enviados para um repositório remoto.

Em nossa última mensagem de commit, “fraze” deveria ser “phrase”. Se usarmos git log podemos ver isso.

O log do Git com um tipo realçado

Para corrigir isso, usaremos o --amend opção como esta.

git commit --amend -m "Optimized phrase identification"

Usando a opção commit --amend para corrigir uma mensagem de commit

Se usarmos git log mais uma vez, podemos ver que o commit antigo foi substituído por um novo com a mensagem de commit corrigida.

O log do Git mostrando a mensagem de confirmação corrigida

Se quisermos adicionar um arquivo que esquecemos de testar, podemos fazer o commit desse arquivo para que apareça como parte do commit anterior.

nós vamos usar add para preparar o arquivo, então faça um commit com o --amend opção. O --no-edit opção significa que não precisamos fornecer uma nova mensagem de confirmação. A mensagem de confirmação anterior é mantida.

git add jibber.c
git commit --amend --no-edit

Submetendo um arquivo para o commit anterior

Removendo alterações de um commit

Se você inadvertidamente preparou e fez o commit de um arquivo que não pretendia, você pode remover esse arquivo do commit usando o comando reset comando. Vamos redefinir o commit de volta para a área de teste, ou index. Em seguida, removeremos o arquivo e confirmaremos novamente o restante dos arquivos.

Para redefinir o último commit para a área de preparação, usamos o reset --soft comando. HEAD~ é uma abreviação de “o commit atrás do HEAD da linha do tempo do commit do projeto”, ou em inglês, “the last commit”.

git reset --soft HEAD~

Enviando o último commit de volta para a área de preparação

Para remover o arquivo que não deveria ter sido incluído, usamos o reset --mixed comando. Isso redefine essas alterações de volta para o diretório de trabalho, recriando o arquivo modificado como um arquivo não confirmado e não testado.

git reset --mixed jibber.c

Removendo um arquivo da área de preparação do Git

Precisamos confirmar os outros arquivos que restam no índice.

git commit -m "Experimental tweaks"

Confirmando os arquivos que permanecem na área de preparação

Os outros dois arquivos que estavam no commit original foram confirmados novamente para nós.

RELACIONADO: Como corrigir, editar ou desfazer confirmações do Git (alterando o histórico do Git)

Revertendo um commit inteiro

Às vezes, desfazer um commit inteiro é a coisa mais fácil de fazer. Ele coloca seu diretório de trabalho e repositório de volta ao estado em que estavam antes do commit.

Precisamos usar o ID de referência com hash do commit. Podemos encontrar isso usando git log:

O log do Git com um identificador de confirmação realçado

Copie essa referência e use-a no revert comando:

git revert e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8

Revertendo um commit identificado por seu ID de commit

Isso abrirá seu editor padrão para que você possa editar uma mensagem de reversão. Há uma mensagem padrão inserida para você. Você pode usar isso ou editá-lo ao seu gosto.

Editando a mensagem revertida, com a mensagem padrão destacada

Quando estiver satisfeito com sua mensagem de reversão, salve o arquivo e saia do editor. No nano, você faz isso com “Ctrl+O” e “Ctrl+X”.

A ação de reversão concluída, desfazendo um commit inteiro

Usando git log mais uma vez, podemos ver que um novo commit foi adicionado que desfaz as alterações do commit revertido.

O canivete suíço Git

Obviamente, commit é um dos comandos Git mais importantes. Ele pode fazer muito, então há muito o que aprender. Conhecer seus recursos menos usados ​​é um tempo bem gasto. Quando você precisar corrigir um erro – agora mesmo – ficará feliz por ter se preparado com antecedência.

RELACIONADO: Como usar o Git merge


Like it? Share with your friends!

0

0 Comments

Your email address will not be published. Required fields are marked *