Cursos

[Noticias][grids]

O que o Git Cherry Pick faz e quando você deve usá-lo?



 git cherry-pick é uma ferramenta simples, mas poderosa, que permite transferir commits seletivamente de um branch para outro. Você pode usá-lo quando não quiser mesclar um branch inteiro no master, mas ainda quiser incluir as alterações de um branch de recurso.

O que é Git Cherry Pick e como ele funciona?

No Git, os commits são as unidades que rastreiam as mudanças ao longo do tempo. Cada confirmação pode representar uma correção de bug, novo recurso ou parte de uma solução maior. Você pode pensar em commits sendo armazenados como uma lista vinculada apontando para trás no tempo; sempre que você muda seu branch HEAD, Git reconstrói seus arquivos de diretório local levando em consideração todos os commits desde o início.

Esta é uma simplificação, é claro, e o Git não armazena tecnicamente os commits como listas simples de alterações, ele usa blobs baseados em arquivo, mas o princípio é o mesmo.

As coisas ficam mais complicadas quando os ramos se envolvem. Freqüentemente, trabalhar em um recurso leva muitos dias ou semanas. Ao invés de bagunçar o repositório principal, ele vai para um branch de recurso separado, e então o código é revisado e mesclado de volta nele. A fusão é basicamente ramificar esse histórico de commit para que todo o branch de recurso seja incluído quando o Git fizer seu trabalho.

No entanto, e se você quiser mesclar algumas coisas, mas não quiser que o branch inteiro seja incluído ainda? Você não pode fazer git merge nesse caso.

Publicidade

É aqui que o git cherry-pick se torna útil. Ele faz o que o nome indica — pega um único commit do branch do recurso, seleciona-o individualmente e o aplica ao branch master, ou vice-versa. Isso copia o commit, para que haja um commit totalmente novo no branch de destino.

Observe que não há nenhuma “ linha real ” conectando o novo commit no branch master ao commit antigo. O novo commit selecionado e criado no master não faz referência ao commit de origem, o commit é simplesmente copiado. O Git cuidará disso quando você mesclar os branches novamente, porque os commits são vistos como cópias uns dos outros.

Na verdade, o commit é & ​​“ transferido ” para o novo branch, embora você tenha que manter em mente que o antigo commit ainda é aplicado ao branch do recurso. No entanto, você não gostaria de reverter o commit de origem, já que isso causará problemas ao mesclar mais tarde.

Por que Cherry Pick?

Existem alguns casos de uso para isso. Talvez você esteja trabalhando em um recurso e ele não esteja pronto para o lançamento, mas você corrigiu um bug no ramo do recurso que gostaria de colocar em sua versão de lançamento semanal. Você pode usar a escolha certa para copiar a correção do bug para o Master para implantá-la antecipadamente.

Ou talvez você tenha vários branches para produção e desenvolvimento e gostaria de copiar uma correção de bug urgente da produção para o desenvolvimento. Cherry pick também pode fazer isso.

Ou você pode até mesmo ter feito um commit acidentalmente para o branch errado. Você pode usar o git cherry-pick para copiá-lo para o caminho certo e, em seguida, git reset para desfazer o commit (desde que esteja no HEAD do branch).

Usando Git Cherry Pick

Depois de entender o que está fazendo, o git cherry-pick é muito simples de usar.

Publicidade

A maneira mais fácil de ver o histórico de commits do Git na linha de comando é com o seguinte comando, que mostra todos os commits, mas com um histórico de branch e merge, que é crucial para usar a escolha certa:

 git log --pretty = format: "% h% s" --graph 

Então, você pode simplesmente copiar o hash SHA1 do commit e executar a escolha certa:

 git cherry-pick 1da76d3 

Observe que você também pode escolher vários commits ao mesmo tempo, basta passar vários hashes.

git cherry-pick tem algumas opções úteis:

  •  --no-commit aplica apenas as mudanças em seu diretório. Você precisará preparar e confirmar manualmente.
  •  --edit permitirá que você altere a mensagem de confirmação.
  •  -x adicionará uma mensagem dizendo “ escolhida a dedo do commit: … ”

Claro, se você estiver usando um cliente Git baseado em GUI como Fork ou GitKraken, que é altamente recomendável, você pode apenas clicar com o botão direito do mouse no commit e escolher selecioná-lo a dedo: