Digamos que você tenha um repositório Git. Você está trabalhando no mestre branch e você fez alguns commits (A, B e C) no mestre ramo também.
Agora, de repente, você tem uma ótima ideia. Então, você cria outro branch nova ideia. Então, você começou a fazer commits (E, F e G) lá.
Você também fez algumas alterações no mestre branch novamente e adicionou um novo commit H.
Agora, se sua nova ideia for um sucesso, você pode querer mesclar o nova ideia ramo para o mestre galho. Digamos que você o fundiu. Irá criar um novo commit eu como você pode ver na figura abaixo. O novo commit conterá tudo (todas as mudanças nos commits E, F, e G) da filial nova ideia.
Agora, digamos, você não quer mesclar todos os commits do branch nova ideia para o mestre galho. Você só deseja mesclar as mudanças (apenas as mudanças diff) no commit F para o mestre galho. É aqui que entra o git cherry pick. O Git Cherry Pick permite que você faça isso. Você acabou de encontrar o hash do commit que deseja escolher e aplicá-lo ao branch que deseja. Muito simples.
Neste artigo, vou mostrar a você como escolher no Git. Então vamos começar.
Fluxo de trabalho do Git Cherry Pick:
Nesta seção, irei configurar um repositório Git de uma forma que você entenderá por que o git cherry pick é usado e como escolher o cherry pick no Git.
Primeiro, inicialize um repositório Git vazio cherry-pick-demo / do seguinte modo:
$ git init cherry-pick-demo
Agora, navegue até o repositório da seguinte maneira:
$ cd cherry-pick-demo /
Agora, crie um a Principal.c arquivo com o seguinte conteúdo:
Agora, adicione o arquivo à área de teste da seguinte maneira:
$ git add .
Agora, comprometa as alterações da seguinte maneira:
$ git commit -m 'commit inicial'
Agora, crie um .gitignore arquivo com o seguinte conteúdo:
Adicione o arquivo à área de teste.
$ git add .
Comprometa as mudanças:
$ git commit -m 'adicionado .arquivo gitignore '
Como você pode ver, tenho 2 commits agora no meu mestre galho.
$ git log --oneline
Agora, quero enviar meu repositório Git local para um servidor Git remoto para que outras pessoas possam trabalhar neste repositório. Você também pode usar o GitHub aqui. Vou usar um servidor SSH local para isso aqui.
Portanto, adicione um URL de repositório Git remoto da seguinte maneira:
$ git remote add origin git @ git.linuxhint.com: ~ / cherry-pick-demo.idiota
Agora, empurre o mestre ramifique para o repositório Git remoto da seguinte maneira:
$ git push origin master
Agora digamos prumo quer contribuir para o projeto. Então, ele clonou o repositório Git em seu computador.
$ git clone git @ git.linuxhint.com: ~ / cherry-pick-demo.git myproject
Agora, bob navega para o diretório de seu projeto.
$ cd myproject /
Ele também tem os 2 commits que adicionei.
$ git log --oneline
Agora, Bob cria um teste ramo para experimentar as ideias dele.
$ git checkout -b test
Ele decide alterar o valor de retorno com uma constante EXIT_SUCCESS de stdlib biblioteca.
Ele adiciona as mudanças à área de teste.
$ git add .
Compromete as mudanças.
$ git commit -m 'usou EXIT_SUCCESS em vez de 0 como valor de retorno'
Agora, ele decide usar uma função printMessage () imprimir a mensagem. Então, ele escreve a função.
Ele confirma as mudanças novamente.
$ git add .$ git commit -m 'função printMessage () adicionada'
Então, bob usa a função no programa.
Ele confirma as mudanças novamente.
$ git add .$ git commit -m 'usou a função printMessage () para imprimir a mensagem'
Agora, bob tem os seguintes commits no teste galho.
Agora, bob envia o branch de teste para o repositório remoto Git.
$ git push origin test
Agora, Bob liga para você e fala sobre as mudanças incríveis que ele fez. Então, você buscou as alterações do repositório remoto Git para seu próprio repositório local.
$ git fetchAgora, você vê um novo ramo origem / teste.
Você também encontrou 3 novos commits que Bob fez.
$ git log - origem / teste on-line
Agora, você gostaria de saber quais mudanças bob fez.
$ git log -p origin / test
Você decide não substituir o valor de retorno por EXIT_SUCCESS como Bob fez.
Você gosta do conceito de usar uma função para imprimir mensagens.
Você também gosta deste commit.
Então, você deseja mesclar 2 dos 3 commits que bob fez. Se você usou git merge para mesclar o teste de branch, então todos os 3 commits seriam aplicados. Mas, com o recurso git cherry pick, você só pode mesclar os commits que desejar.
Observe que quando você escolhe os commits no Git, você sempre começa com o commit mais antigo e avança para o mais novo pouco a pouco.
Antes, eu escolhi cereja, o a Principal.c arquivo tem a seguinte aparência.
Agora, vamos escolher o mais antigo dos 2 commits, 9a4e532, da seguinte maneira:
$ git cherry-pick 9a4e532
Um conflito de fusão! Isso pode acontecer.
Agora, abra o a Principal.c arquivo e consertar o conflito de mesclagem.
O arquivo final deve ser o seguinte.
Agora, adicione as alterações à área de teste.
$ git add.
Agora, comprometa as alterações da seguinte maneira:
$ git cherry-pick --continue
NOTA: Você também pode usar git commit aqui também. Você decide. eu prefiro git cherry-pick -continue pois irá usar automaticamente a mensagem de commit do commit que estou escolhendo.
Agora, digite sua mensagem de confirmação aqui e salve o arquivo.
Um novo commit deve ser adicionado.
Agora, escolha o próximo commit da seguinte maneira:
$ git cherry-pick 08ba5e7
Sem conflito de mesclagem. Excelente! Um novo commit deve ser adicionado automaticamente.
Como você pode ver, eu consigo exatamente o que queria. Eu apenas mesclei os commits de que precisava.
Então, é assim que você escolhe no Git. Obrigado por ler este artigo.