Git Cherry Pick
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.
Cherry Pick
editarO 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.
Um Commit
editarVamos 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
editarMas 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.