Para fazer cherry-pick de commits dependentes no macOS, primeiro identifique o commit de pré-requisito e aplique-o antes do commit que depende dele. No Terminal, inspecione o histórico do branch de origem, confirme se o branch de destino tem uma árvore de trabalho limpa e, em seguida, faça o cherry-pick dos IDs de commit selecionados na ordem de dependência. O Git aplica a alteração de cada commit e cria um novo commit no branch em que você fez checkout no momento; ele não determina automaticamente quais alterações o seu destino precisa. Documentação do cherry-pick do Git

Qual ordem os commits dependentes devem usar?

Aplique um pré-requisito antes da alteração dependente dele. Por exemplo, se o commit a1b2c3 adiciona uma função e o commit d4e5f6 chama essa função, selecione a1b2c3 primeiro e d4e5f6 em segundo. Se o segundo commit espera um arquivo, interface ou comportamento introduzido pelo primeiro, invertê-los pode causar conflitos ou deixar o destino em um estado intermediário quebrado.

Use a ordem pai-para-filho do branch de origem como seu ponto de partida. As diretrizes de fluxo de trabalho do Git recomendam dividir o trabalho em commits lógicos que sejam consistentes e possam funcionar de forma independente; históricos reais podem não corresponder a esse ideal, portanto, inspecione o que cada commit selecionado altera e do que depende. O cherry-pick copia alterações de commits individualmente, enquanto o merge traz alterações no nível do branch. Se você precisa do branch inteiro e de seu histórico, considere se um merge se encaixa melhor do que selecionar commits um a um. Documentação de fluxos de trabalho do Git

Inspecione o histórico no Terminal

Abra o Terminal no seu Mac, vá até a pasta do repositório e verifique seu estado atual. Substitua o caminho entre aspas pelo caminho real do seu repositório; o uso de aspas permite espaços em nomes de pastas.

cd "/path/to/your/repository"
git status --short --branch
git log --graph --oneline --decorate --all

O primeiro comando altera o diretório de trabalho do Terminal. O git status mostra o branch em que o checkout foi feito e quaisquer alterações locais. A visualização gráfica ajuda você a ver quais commits estão no branch de origem e a ordem deles. O Terminal do macOS usa zsh por padrão, e os comandos acima usam a sintaxe de shell comum suportada nele. Guia do Terminal da Apple

Se o branch necessário for um branch de rastreamento remoto e seu estado mais recente não estiver presente localmente, faça o fetch antes de inspecioná-lo:

git fetch origin
git log --reverse --oneline origin/feature-name

Substitua origin/feature-name pelo nome real do branch remoto. A opção reverse exibe os commits na ordem do mais antigo para o mais recente. Para um histórico grande, restrinja o log aos commits após uma base comum conhecida, por exemplo git log --reverse --oneline base-commit..origin/feature-name. Leia os assuntos resultantes e, em seguida, inspecione as alterações candidatas com git show COMMIT_ID. Um intervalo de commits é conveniente para revisão, mas não presuma que o argumento de intervalo em si garanta a ordem de dependência personalizada que você precisa: IDs de commit explícitos deixam a sequência pretendida clara.

Faça o cherry-pick na ordem de pré-requisitos

Antes de começar, faça commit ou guarde de forma segura as alterações locais. A operação normal de cherry-pick requer uma árvore de trabalho limpa, e você deve confirmar o branch de destino antes de aplicar qualquer coisa. Substitua os IDs de exemplo pelos IDs de commit reais, completos ou abreviados, ordenados do pré-requisito para o dependente:

git switch destination-branch
git status --short --branch
git cherry-pick a1b2c3 d4e5f6

O Git cria um novo commit para cada alteração selecionada na ordem fornecida. Verifique a saída cuidadosamente: se uma alteração já foi incluída por outra via, ou se o destino divergiu, o Git pode relatar uma alteração vazia ou parar com um conflito. Depois disso, inspecione o histórico resultante e a árvore de trabalho com git log --oneline -n 5 e git status. Execute as verificações relevantes do projeto antes de confiar no resultado; um cherry-pick limpo significa apenas que o Git aplicou as alterações, não que o recurso se comporta conforme o pretendido.

Se um commit entrar em conflito

Quando um cherry-pick entra em conflito, o Git pausa naquele commit. Inspecione os arquivos afetados e resolva cada conflito combinando a alteração pretendida da origem com o conteúdo atual do branch de destino. Prepare os arquivos resolvidos na staging area com git add e continue a sequência:

git add "path/to/resolved-file"
git cherry-pick --continue

Use git cherry-pick --abort para cancelar a sequência atual e retornar ao estado anterior ao seu início. Use git cherry-pick --skip apenas quando tiver decidido que a alteração do commit atual deve ser omitida; commits posteriores podem depender dela, portanto pular pode fazer com que essas alterações falhem ou percam o sentido. O Git documenta continue, skip e abort como controles para uma operação em andamento. Opções do sequenciador git cherry-pick

Para um commit de merge, faça uma pausa antes de selecioná-lo: o Git exige a escolha de um pai da linha principal (mainline) porque o merge tem mais de um pai. Da mesma forma, se commits posteriores não puderem ser compreendidos sem uma longa cadeia de alterações anteriores, selecionar apenas alguns pode não produzir um resultado coerente. Inspecione as dependências e escolha a menor sequência completa que as preserve.

Fontes