1
resposta

Dúvidas sobre o git cherry-pick

Caso a gente precise de um código que resolva um bug ou algo parecido usando esse comando git cherry-pick, nesse caso, não estaríamos trazendo um código desatualizado junto ao nosso código ja atualizado? Pq temos a nossa master ou outra branch atual, daí vamos trazer outro commit com coisas que vão nos ajudar para nossa branch atual, assim não estaríamos desatualizando nosso código com as coisas atuais que estamos fazendo na branch atual?

Não compreendi muito essa parte.

1 resposta

Oi, Diogo! Tudo bem?

Peço desculpas pela demora em obter um retorno.

Ao realizar o cherry-pick, na realidade, não estamos desatualizando a branch principal. Esse comando é utilizado quando desejamos trazer um commit específico de outra branch que está em desenvolvimento para a principal, sem passar pelo risco de realizar mesclagens que, no final, gerariam algum bug no projeto.

Por baixo dos panos, o cherry-pick realiza apenas uma cópia do conteúdo e adiciona ao ponto mais recente da branch atual. Dessa maneira, podemos escolher qual commit melhor se adequa ao que desejamos e, além disso, abrimos portas para que mais pessoas atuem juntas na correção de algo.

Para compreender um pouco mais sobre o cherry-pick, trouxe uma imagem que ilustra o seu funcionamento, observe:

Início de transcrição. Imagem ilustrativa. Na parte superior, há o título "Cherry-pick", Logo abaixo, a imagem está dividida em lado esquerdo e direito. No lado esquerdo, há o subtítulo "Antes" e, abaixo dele, uma representação de duas ramificações; da esquerda para a direita, a representação começa com dois círculos de coloração cinza de nome "first commit" e "second commit", com uma seta apontando para o início; após o commit "second commit", há uma ramificação; a primeira ramificação continua na parte superior e possui mais dois círculos que representam commits, cujo último tem a coloração verde e vem acompanhado das etiquetas "Head" e "master"; a outra parte da ramificação é precedida por três círculos acinzentados, cujo último possui a etiqueta "feature". Na parte direita, há um subtítulo com o texto "Depois"; abaixo dele há uma representação de duas ramificações; da esquerda para a direita, a representação começa com dois círculos de coloração cinza de nome "first commit" e "second commit", com uma seta apontando para o início; após o commit "second commit", há uma ramificação; a primeira ramificação continua na parte superior e possui mais três círculos que representam commits, cujo último tem a coloração vermelha e vem acompanhado das etiquetas "Head" e "master"; a outra parte da ramificação é precedida por três círculos acinzentados, cujo último possui a etiqueta "feature". Fim da transcrição.

Observe que, antes de executar o cherry-pick, haviam os commits que foram feitos diretamente na “master” (first commit, second commit, third commit e fourth commit). Além disso, haviam os commits 1, 2, e 3, que só existiam na branch chamada “feature”.

Depois do cherry-pick, o último commit da branch feature (o commit 3) passou a compor o histórico de commits da branch “master”. Inclusive, ele foi destacado por uma cor vermelha, como vimos na imagem. O fato de ter a mesma mensagem e estar ressaltado nos indica que houve uma cópia.

Como as duas branchs (”master” e “feature”) estavam atualizadas e sendo manipuladas concomitantemente, não houve uma desatualização.

Diogo, espero ter ajudado. Caso a dúvida persista ou surjam outras, fico à disposição para ajudá-lo.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.