30 de agosto de 2021

Realizando commits parciais no Git

Durante o desenvolvimento é comum alterarmos o mesmo arquivo diversas vezes e se você gosta de manter um histórico consistente de suas alterações você pode esbarrar na situação onde um arquivo foi alterado em mais de um ponto e quer separar em commits distintos essas alterações.

Pra exemplificar este aqui é o código que iremos trabalhar:

Agora o que queremos fazer é adicionar uma função que verifica se o cliente é valido (o nome deverá ter mais de três caracteres e a idade deve ser um número maior ou igual a zero).

Como podemos ver no cenário acima, a função valida_cliente foi criada e depois nós adicionamos na função inserir_cliente a chamada dessa função. O que queremos fazer aqui é criar um commit com a função valida_cliente e seus testes e no outro commit a alteração na função inserir_cliente e seus novos testes.

Se utilizarmos os comandos que usamos mais comumente no nosso dia a dia iremos colocar todas as alterações em um único commit e entrega-las. 

Diferenças nos arquivos

No geral essa situação é comum, mas podem existir casos excepcionais onde teremos que fazer o procedimento onde criamos commits para as alterações em partes menores. Para conseguirmos fazer isso iremos utilizar o git add de maneira interativa, que irá abrir uma caixa de dialogo com diversas opções do que podemos realizar. Vamos executar o comando git add -i main.py

Iremos selelecionar a opção patch (digitando 5 ou "p"), após isso será apresentada a lista de arquivos que queremos atuar. Selecionamos nosso arquivo main.py com a opção 1 e agora podemos pressionar Enter para iniciar. Logo de cara todas as alterações serão oferecidas para inserirmos, porém não é isso que desejamos, então utilizando a opção s fazemos um split e então começará a ser oferecido pedaços de alterações para incluirmos ou recusarmos, com y e n respectivamente. O processo para o nosso arquivo foi feito conforme a gravação abaixo. Ao final dos pedaços de alteração que foram oferecido voltamos para o menu inicial e podemos pressionar 7 ou q para sair:

Processo de inclusão interativa de trechos do arquivo

Após isso fiz o commit das alterações incluídas e realizando um git diff podemos ver que a inclusão da função de validação não foi feita, conforme queriamos, vamos reservar um commit só para ela:

Fazendo commit da alteração que falta


Com isso concluímos o nosso trabalho e temos os commits organizados da maneira como planejamos lá no inicio. Essa ferramenta não é sempre necessária, porém pode ser muito útil quando precisamos organizar as alterações em um arquivo separando elas de maneira diferente na linha temporal do git.

Caso tenha alguma sugestão ou dúvida não esqueça de utilizar os comentários. =)

Nenhum comentário:

Postar um comentário