Saltar para o conteúdo

Git Cherry Pick

Fonte: Wikiversidade

O Git é um sistema de controle de versão de arquivos; em outras palavras, é responsável por guardar o histórico de alterações sempre que alguém modificar algum arquivo que está sendo monitorado por ele.

O que o comando git cherry-pick faz?

Esse comando escolhe um commit de uma branch e aplicar em outra branch. Para ser mais preciso cherry pick aplica as mudanças introduzidas por um ou mais commits existentes em outra branch.

Cherry pick é similar ao merge e rebase, mas ao invés de pegar uma branch toda cheia de commits ou mover commits como o merge e o rebase fazem, cherry pick permite aplicar apenas a mudança que interessa.

Vamos dizer que existe um projeto sobre aplicação web onde duas pessoas estão trabalhando, e o repositório e histórico de mudanças se parece com isso:

  • A pessoa 1 está trabalhando no main branch e temos o commit inicial, adição de app config e readme e adicão sobre a pagina.
  • A pessoa 2 está trabalhando no nav branch e esse branch começou após 2 commit do main branch (adição de app config e readme). Os commits foram: bugfix na config, adição de esqueleto do componente nav e adição de logo.

Olhando esse repositório, vemos que a pessoa 2 arrumou um bug da main branch antes de começar a trabalhar no esqueleto do componente nav. A pessoa 1 está trabalhando na main branch e quer pegar o bugfix sem pegar qualquer outra mudança inacabada, e é pra isso que git cherry-pick serve.

Para usar git cherry-pick, precisa-se referir ao commit desejado pelo seu hash code. Para obtê-lo, rode git log no terminal. Ao rodar isso, será impresso as informações apenas sobre os commit sobre a branch que a pessoa está trabalhando. Para ver as informações sobre os commit de outra branch rode git log <nome da branch>, onde nesse caso seria git log nav. Para ficar mais fácil de entender o output, use a flag --oneline. Depois de rodarmos o comando podemos ver todos as informações sobre os commits na nav branch, onde na esquerda estará o hash code e na direita estará o nome do commit. Pegamos o hash code do commit 2, commit que desejamos aplicar, e com isso temos tudo que precisamos para rodar git cherry-pick. Antes de rodar precisa ter certeza que está na branch que deseja aplicar o commit. Se não tiver certeza sobre, pode rodar git status para ver a branch que está.

Para rodar cherry pick, escreva git cherry-pick <hash code do commit>. O que acontece ao rodar esse comando é que git na verdade está aplicando as mudanças introduzidas pelo commit na main branch, criando um novo commit com essas mudanças. Podemos rodar git log --oneline e comparar o hash code com o do nav branch, vendo que possuem hash codes diferentes.

Multiplos Commits

[editar | editar código-fonte]

Mas e para múltiplos commits?

Cherry pick serve também! Usando o mesmo exemplo anterior, a pessoa 1 não quer só bugfix mas a logo também. Se a pessoa 1 quer pegar esses dois commits sem pegar qualquer um dos outros inacabados, ela é capaz de fazer isso com git cherry-pick. Para fazer isso, é necessário o hash code dos respectivos commits. Rode git cherry-pick <hash code logo> <hash code bugfix>. O que acabou de acontecer é que o git aplicou as mudanças uma de cada vez, na ordem que foi especificada na linha de comando. Logo nesse exemplo o git aplicará um commit com a logo e depois um commit com o bugfix e no fim das contas surgirá dois novos commits com essas mudanças na main branch.