git cherry-pick
é um comando poderoso que permite que Git commits arbitrários sejam escolhidos por referência e anexados à CABEÇA de trabalho atual. Cherry picking é o ato de escolher um commit a partir de um ramo e aplicá-lo a outro. git cherry-pick
pode ser útil para desfazer alterações. Por exemplo, digamos que um commit é feito acidentalmente para um ramo errado. Você pode mudar para o ramo correto e escolher o commit para onde ele deve pertencer.
Quando usar git cherry pick
git cherry-pick
é uma ferramenta útil mas nem sempre uma boa prática. A apanha da cereja pode causar commits duplicados e muitos cenários onde a apanha da cereja funcionaria, as fusões tradicionais são preferidas em vez disso. Com isto dito git cherry-pick
é uma ferramenta útil para alguns cenários…
Colaboração da equipe.
Muitas vezes uma equipe vai encontrar membros individuais trabalhando no mesmo código ou em torno do mesmo código. Talvez uma nova funcionalidade do produto tenha um componente backend e frontend. Pode haver algum código compartilhado entre dois setores de produto. Talvez o desenvolvedor do backend crie uma estrutura de dados que o frontend também precisará utilizar. O desenvolvedor do frontend poderia usar git cherry-pick
para escolher o commit no qual esta estrutura de dados hipotética foi criada. Esta escolha permitiria ao desenvolvedor do frontend continuar o progresso do seu lado do projeto.
Bug hotfixes
Quando um bug é descoberto é importante entregar uma correção para os usuários finais o mais rápido possível. Para um cenário exemplo,digamos que um desenvolvedor começou a trabalhar em um novo recurso. Durante o desenvolvimento desse novo recurso, eles identificam um bug pré-existente. O desenvolvedor cria um commit explícito corrigindo este bug. Este novo patch commit pode ser escolhido diretamente no ramo master
para corrigir o bug antes que ele afete mais usuários.
Desfazer mudanças e restaurar commits perdidos
Algumas vezes um ramo feature
pode ficar obsoleto e não ser mesclado em master
. Algumas vezes um pedido de puxar pode ser fechado sem fusão. Git nunca perde esses commits e através de comandos como git log
e git reflog
eles podem ser encontrados e a cereja pode ser escolhida de volta à vida.
Como usar git cherry pick
Para demonstrar como usar git cherry-pick
vamos assumir que temos um repositório com o seguinte estado de ramo:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
o uso é direto e pode ser executado como:
git cherry-pick commitSha
Neste exemplo commit
Sha é uma referência de commit. Você pode encontrar uma referência de submissão usando git log
. Neste exemplo nós construímos vamos dizer que queremos utilizar commit `f` em master
. Primeiro asseguramos que estamos trabalhando no ramo master
.
git checkout master
Então executamos o cherry-pick com o seguinte comando:
git cherry-pick f
Once executou o nosso histórico de Git será parecido:
a - b - c - d - f Master
\
e - f - g Feature
O f commit foi escolhido com sucesso no ramo master
Exemplos de git cherry pick
git cherry pick
também podem ser passadas algumas opções de execução.
-edit
Passando a opção -edit
o git solicitará uma mensagem de commit antes de aplicar a operação cherry-pick
--no-commit
A opção --no-commit
irá executar o cherry pick mas em vez de fazer um novo commit irá mover o conteúdo do commit alvo para o diretório de trabalho do ramo atual.
--signoff
A opção --signoff
irá adicionar uma linha de assinatura ‘signoff’ ao fim da mensagem de commit do cherry-pick
Além destas opções úteis git cherry-pick
também aceita uma variedade de opções de estratégia de merge. Aprenda mais sobre estas opções na documentação de estratégias de fusão do git.
Adicionalmente, git cherry-pick também aceita a entrada de opções para a resolução de conflitos de fusão, isto inclui opções: --abort --continue
e --quit
estas opções são cobertas com mais profundidade em relação a git merge e git rebase.
Resumo
A escolha deherry é um comando poderoso e conveniente que é incrivelmente útil em alguns cenários. A separação de cereja não deve ser mal utilizada no lugar de git merge ou git rebase. O comando git log é necessário para ajudar a encontrar commits para a escolha de cereja.