Neste post demonstrarei uma das muitas features bacanas disponíveis no git, o commit parcial de arquivos. Esta feature permite ao usuário selecionar quais alterações de determinado arquivo devem ser commitados.
Vamos supor que existe o seguinte arquivo em um projeto:
Neste novo repositório existe um único commit:
A primeira alteração é feita:
Suponha que um colega solicita outra alteração no mesmo arquivo. Ele/Ela pede para alterar o nome da função foo()
para xpto()
.
Depois de ambas mudanças o diff é:
Agora é hora de commitar as alterações. Entretanto, é necessário que cada alteração seja submetida em diferentes commits. Felizmente o git possui uma feature que nos ajuda em situações como essa. Os comandos git add
e git commit
permitem ao usuário selecionar quais partes do arquivos devem ser adicionadas. Isso é feito passando a opção -p, –patch
. Em nosso exemplo, será utilizado git commit
.
Como pode ser visto, git mostra cada alteração realizada e pergunta ao usuário o que deve ser feita com ela. As opções são: [y,n,q,a,d,/,s,e,?].
Para visualizar o texto de ajuda digite ?
. O seguinte texto devera ser exibido:
No exemplo, é mostrado o primeiro hunk de alteração do arquivo. Em nosso primeiro commit queremos apenas as alteração realizadas na função bar()
, então o primeiro hunk deve ser ignorado. Assim, a opção n
é a escolha certa.
Depois disso o git mostra todas as demais alterações como se fosse um único hunk, então é necessário quebra-las em alterações menores. Para isso existem duas opções: s
e e
. A primeira faz com que o git quebre o hunk em partes menores. A segunda, por sua vez, permite que o usuário escolha manualmente quais linhas alteradas devem ser inclusas. Para este pequeno tutorial iremos utilizar a opção s
. Git devera mostrar algo semelhante a isso:
O hunk anterior foi quebrado em 3 partes. Então será iterado sobre todos eles perguntado ao usuário qual ação deve ser executada para cada um deles. O primeiro hunk criado também deve ser ignorado. O segundo hunk é a primeira alteração relacionada a função bar()
e deve ser adicionado, para isso é necessário escolher a ação y
.
O terceiro também deve ser adicionado ao commit…
Quando não existir mais hunks a serem selecionados, como estamos utilizando o comando git commit
, será aberto o editor para o usuário escrever a mensagem de commit. Após isso, está feito:
Agora que o primeiro commit contem apenas as alterações referentes a função bar()
, as demais mudanças podem ser comitadas em um segundo commit:
Espero que vocês tenham gostado desta dica simples. Considero escrever um post cobrindo todas as demais opções não citadas neste texto (e.g. seleção manual de hunk, entre outras). Encorajo ao leitor brincar com as demais opção disponibilizadas.