Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.40.0 → 2.43.0 no changes
- 2.39.3 04/17/23
- 2.38.1 → 2.39.2 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 no changes
- 2.35.0 01/24/22
- 2.30.1 → 2.34.8 no changes
- 2.30.0 12/27/20
- 2.27.1 → 2.29.3 no changes
- 2.27.0 06/01/20
RESUMO
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] [-S[<keyid>]] <commit>… git cherry-pick (--continue | --skip | --abort | --quit)
DESCRIÇÃO
Dado um ou mais commits existentes, aplique a alteração que cada um
introduz, registrando um novo commit para cada um. Isso requer que a sua
árvore de trabalho esteja limpa (nenhuma alteração a partir do commit
HEAD
).
Quando não é óbvio como aplicar uma alteração, acontece o seguinte:
-
O ramo atual e o ponteiro
HEAD
permanecem no último commit realizado com sucesso. -
A referência
CHERRY_PICK_HEAD
é configurada para apontar para o commit que introduziu a mudança que é difícil de aplicar. -
Caminhos nos quais a mudança aplicada corretamente são atualizados no arquivo de índice e na sua árvore de trabalho.
-
Para os caminhos conflitantes, o arquivo do índice registra até três versões, conforme descrito na seção "MESCLAGEM REAL" do git-merge[1]. Os arquivos da árvore de trabalho incluirão uma descrição do conflito entre os marcadores de conflito habituais
<<<<<<<
e>>>>>>>
. -
Nenhuma outra modificação é feita.
Veja git-merge[1] para algumas dicas sobre como resolver tais conflitos.
OPÇÕES
- <commit>…
-
Faz o commit na escolha seletiva. Para conhecer uma lista completa das diferentes maneiras de soletrar os nomes dos commits, consulte o comando gitrevisions[7] O conjunto dos commits também podem ser encaminhados porém é predefinido que nenhuma passagem seja feita, consulte o comando git-rev-list[1] assim como a sua opção
--no-walk
. Observe que ao definir um argumento para o intervalo, este irá alimentar todos os <commit>… percorrendo apenas uma revisão (mais adiante, consulte um exemplo que utiliza maint master..next). - -e
- --edit
-
Com esta opção, o git cherry-pick permitirá que você edite a mensagem de commit antes de confirmar.
- --cleanup=<modo>
-
Essa opção define como a mensagem de commit sera limpa antes de ser encaminhada para o maquinário de commit. Para mais detalhes consulte git-commit[1]. Em particular, caso o valor <mode> tenha um valor de tesoura
scissors
, a tesoura será anexada aMERGE_MSG
antes de ser repassada no caso de um conflito. - -x
-
Ao gravar o commit, acrescente uma linha que diz "(cherry picked from commit …)" na mensagem do commit original, indicando de onde a escolha seletiva da alteração deste commit foi feito. Isto é feito apenas para as escolhas seletivas sem conflitos. Não use esta opção caso esteja fazendo uma escolha seletiva do seu ramo privado porque a informação é inútil para o destinatário. No entanto, caso esteja fazendo uma escolha seletiva entre dois ramos publicamente visíveis (como por exemplo, fazendo a atualização retroativa de uma correção para um ramo de manutenção para uma versão de lançamento anterior de um ramo de desenvolvimento), pode ser útil adicionar esta informação.
- -r
-
Costumava ser que o comando predefinia para fazer com a opção
-x
descrito acima, e a opção-r
era para desativá-lo. Agora a predefinição é não utilizar a opção-x
, então esta opção não é operacional. - -m parent-number
- --mainline parent-number
-
Geralmente você não pode fazer uma escolha seletiva de uma mesclagem porque você não sabe qual o lado da mesclagem principal deve ser considerada. Esta opção determina o número da origem (a partir de 1) do principal e permite que a escolha seletiva repita a alteração em relação a origem informada.
- -n
- --no-commit
-
Normalmente, o comando cria automaticamente uma sequência de commits. Esta opção aplica as alterações necessárias para selecionar cada commit informada na sua árvore de trabalho e o índice, sem fazer qualquer commit. Além disso, quando esta opção é utilizada, o seu índice não precisa coincidir ao commit do
HEAD
. A escolha seletiva é feita contra a condição inicial do seu índice.Isso é útil quando você seleciona mais de um efeito de commit para seu índice em uma linha.
- -s
- --signoff
-
Adicione uma linha de assinatura no final da mensagem do commit. Para mais informações, consulte a opção signoff em git-commit[1].
- -S[<keyid>]
- --gpg-sign[=<keyid>]
- --no-gpg-sign
-
Commits assinados com o GPG O argumento
keyid
é opcional e a predefinição retorna para a identidade de quem fez o commit; caso seja utilizado, deve estar anexado a opção e sem espaço. A opção--no-gpg-sign
é útil para revogar a variável de configuraçãocommit.gpgSign
e a anterior--gpg-sign
. - --ff
-
Se o atual HEAD é o mesmo que o pai do commit cherry-pick’ed, então um avanço rápido para este commit será executado.
- --allow-empty
-
É predefinido que a escolha seletiva de um commit vazio falhará, indicando que é necessário uma chamada explícita do comando
git commit --allow-empty
. Esta opção substitui este comportamento, permitindo que os commits vazios sejam preservados automaticamente em uma escolha seletiva. Observe que quando "--ff" estiver em vigor, os commits vazios que atendam ao requisito de "avanço rápido" serão mantidos mesmo sem esta opção. Observe também que o uso desta opção mantém apenas os commits inicialmente estão vazios (ou seja, o commit registrou a mesma árvore que o seu pai). Os commits que são tornados vazios devido a um commit anterior são descartados. Para impor a inclusão destes commits, utilize a opção--keke-redundant-commits
. - --allow-empty-message
-
É predefinido que a escolha seletiva irá falhar quando houver um commit com uma mensagem sem nenhum conteúdo. Esta opção substitui este comportamento, permitindo que os commits com mensagens sem nenhum conteúdo possam ser usados.
- --keep-redundant-commits
-
Caso um commit que esteja sendo escolhido seletivamente duplique um commit já no histórico atual, ele ficará vazio. É predefinido que estes commits redundantes façam com que a escolha seletiva
cherry-pick
pare para que o usuário possa examinar o commit. Esta opção substitui esse comportamento e cria um objeto commit vazio. implica no uso da opção--allow-empty
. - --strategy=<estratégia>
-
Use a estratégia de mesclagem fornecida. Deve ser usado apenas uma vez. Veja a seção MERGE STRATEGIES em git-merge[1] para detalhes.
- -X<opção>
- --strategy-option=<opção>
-
Encaminhe a um opção específica até a estratégia de mesclagem. Para mais detalhes, consulte git-merge[1].
- --rerere-autoupdate
- --no-rerere-autoupdate
-
Permita que o mecanismo "rerere" atualize o índice com o resultado da resolução automática de conflitos, caso seja possível.
SEQUENCER SUBCOMANDOS
- --continue
-
Continue a operação em andamento utilizando as informações existentes em
.git/sequencer
. Pode ser utilizado para continuar após a resolução dos conflitos em uma falha na seleção ou reversão da escolha seletiva. - --skip
-
Ignore o commit atual e continue com o restante da sequência.
- --quit
-
Esqueça a operação atual em andamento. Pode ser utilizado para limpar a condição do sequenciador após uma falha na seleção ou reversão de uma escolha seletiva.
- --abort
-
Cancele a operação e retorne a condição pré-sequência.
EXEMPLOS
-
git cherry-pick master
-
Aplique a mudança introduzida pelo commit na ponta do branch master e crie um novo commit com esta mudança.
-
git cherry-pick ..master
-
git cherry-pick ^HEAD master
-
Aplique as alterações introduzidas por todos os commits que são ancestrais do master, mas não do HEAD para produzir novos commits.
-
git cherry-pick maint próximo ^master
-
git cherry-pick maint master..próximo
-
Aplique as alterações introduzidas por todos os commits que sejam ancestrais do "maint" ou "next", porém não do "master" ou dos seus ancestrais. Note que o último não significa que
maint
e tudo entremaster
enext
; especificamente,maint
não será usado caso esteja incluso nomaster
. -
git cherry-pick master~4 master~2
-
Aplique as alterações introduzidas pelo quinto e terceiro últimos commits apontados pelo master e crie 2 novos commits com essas mudanças.
-
git cherry-pick -n master~1 next
-
Aplique as alterações na árvore de trabalho e no índice que foram introduzidos pelo segundo último commit apontada pelo "master" e pelo último commit apontada pelo próximo, porém não crie nenhum commit com estas alterações.
-
git cherry-pick --ff ..next
-
Caso o histórico seja linear e
HEAD
seja um ancestral do próximo, atualize a árvore de trabalho e avance o ponteiroHEAD
para que coincida com o próximo. Caso contrário, aplique as alterações introduzidas pelos commits que estão na próxima, mas não o `HEAD`para o ramo atual, criando um novo commit para cada nova alteração. -
git rev-list --reverse master -- README | git cherry-pick -n --stdin
-
Aplique as alterações introduzidas por todas as confirmações no ramo principal que tocaram no README para a árvore de trabalho e o índice, para que o resultado possa ser inspecionado e transformado em uma única nova confirmação, se adequado.
A seqüência a seguir tenta retroceder um patch, suspender porque o código ao qual o patch se aplica mudou muito e, em seguida, tenta novamente, desta vez exercendo mais cuidado com as linhas de contexto correspondentes.
$ git cherry-pick topic^ (1) $ git diff (2) $ git reset --merge ORIG_HEAD (3) $ git cherry-pick -Xpatience topic^ (4)
-
aplique a alteração que seria exibido através do comando
git show topic^
. Neste exemplo, o patch não se aplica de maneira limpa; portanto, as informações sobre os conflitos são gravadas no índice e na árvore de trabalho, sem nenhum resultado do novo commit. -
resumir as alterações a serem reconciliadas
-
cancela a escolha seletiva. Em outras palavras, retorne a condição de escolha seletiva anterior, preservando as alterações locais que você teve na árvore de trabalho.
-
tente aplicar a mudança introduzida por
topic^
novamente, gastando tempo extra para evitar erros baseados em linhas de contexto correspondentes incorretas.
GIT
Parte do conjunto git[1]