git cherry-pick não funciona

110

Estou tentando escolher um commit do master e colocá-lo no branch de produção atual. No entanto, quando eu executo git cherry-pick <SHA-hash>, apenas recebo esta mensagem:

# On branch prod_20110801
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#   site/test-result/
 nothing added to commit but untracked files present (use "git add" to track)
 The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

Nota: Eu tentei fazer um reset e um reset --hard HEAD ^, e nenhum dos dois pareceu mudar nada.

Estou confuso sobre por que isso não está funcionando para mim.

Qualquer insight, conselho ou ideia sobre como resolver isso seria útil ~!

Jay Taylor
fonte
Isso aconteceu comigo quando acidentalmente tentei escolher o commit errado. Acontece às vezes ao usar o gitk.
cst1992

Respostas:

141

Git está resolvendo a escolha seletiva como um no-op - todas as mudanças introduzidas por aquele commit foram introduzidas por algum commit em seu branch atual. (Ou é o que o Git pensa, de qualquer maneira.) Verifique se o commit que você está escolhendo já não foi mesclado de alguma forma, como um merge adequado, rebase / escolha aleatória ou patch fragmentado. (Use git show <commit-id>para ver a diferença.)

Cdhowie
fonte
16
Obrigado pelo seu conselho, parece que a escolha certa já aconteceu e tudo que eu preciso fazer é empurrá-lo para o github.
Jay Taylor
Certo, não percebi que estava verificando o conteúdo dos arquivos fornecidos com o commit-id. Procurei o commit-id no log e não consegui encontrar. descobriu-se que já estava incorporado.
mparaz
Infelizmente, esse não é o único motivo do problema em questão. Eu tenho exatamente a mesma situação quando eu tinha o commit, que reverte algum commit anterior, e quando eu escolhi isso em outro branch, cujo histórico não tinha as mudanças sendo revertidas (ou seja, não tinha escolhido aquele commit revertido ) Claro, isso é minha culpa. Mas, neste caso, espera-se que o git falhe com o status de conflito, ao invés de tentar ser muito inteligente, o que resulta em confusão do usuário.
Artem Pisarenko
Isso pode acontecer se você reverter um commit de mesclagem e o commit a ser selecionado residir no branch revertido.
matt de
11

No meu caso, isso estava me deixando maluco, pois era bastante óbvio que o commit específico que eu queria escolher não havia sido incorporado ao meu branch atual.

Acontece que alguém tinha escolhido o commit uma semana antes. As mudanças , mas não o SHA específico, já estavam no meu ramo atual e eu não as tinha notado.

Verifique os arquivos que você está tentando escolher. Se eles já tiverem as alterações, uma versão do commit já foi escolhida a dedo ou adicionada de outra maneira. Portanto, não há necessidade de selecioná-lo novamente.

pkamb
fonte
Tenho certeza de que o commit específico nunca está em seu branch quando foi trazido por uma escolha certa, porque a escolha certa será um novo hash, certo? Ou estou entendendo mal?
msouth
@msouth O que originalmente tirou de outras respostas foi "o commit já foi incorporada", mas eu podia ver que era não no meu ramo. Você está certo sobre escolher sempre ser um novo SHA.
pkamb
Sim, eu estava pensando "o commit específico, conforme identificado pelo hash", quando digitei isso. Minha linguagem era imprecisa. Frequentemente, estou olhando para trás na saída de git log --graph --pretty --decorate --onelinepara ver se um determinado SHA está em meu branch ou não. Veja minha resposta abaixo sobre como você também pode se confundir pensando que a mensagem de commit é um indicativo da mudança - há uma situação em que não é, e foi isso que me levou a esta questão originalmente. O cérebro de alguém tende a fazer esses atalhos e eles podem ocasionalmente voltar para mordê-lo.
mês de
6

Observe também que adicionar um arquivo vazio (por exemplo .gitkeep) à árvore é considerado por escolha seletiva como um commit vazio.

Neamar
fonte
No meu caso, eu tinha um commit de reversão (que estava revertendo um commit vazio) antes da minha tentativa de escolha, então eu acho que qualquer coisa vazia provavelmente fará com que esta mensagem apareça.
lidkxx
3

Então, aqui está Outra situação confusa em que isso pode surgir: Eu tive o seguinte:

captura de tela do git log

Eu estava tentando escolher 9a7b12e que aparentemente não é nada - ele até tentou me dizer nessa linha na saída do log do git que 4497428 era o que eu realmente queria. (O que eu fiz foi apenas procurar a mensagem de confirmação e peguei o primeiro hash que vi que a tinha). De qualquer forma, só quero que as pessoas saibam que há outra maneira de ser enganado e tentar escolher um não op.

boca
fonte
10
Não é muito útil para você votar negativamente sem explicação - esta é a reprodução exata de um problema que tive e que me levou a encontrar esta questão em minha pesquisa. Se você tem uma recomendação para melhorar isso, diga-me nos comentários em vez de apenas votar.
msouth de