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.45.1 → 2.47.0 no changes
- 2.45.0 04/29/24
- 2.39.4 → 2.44.2 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
- 2.23.1 → 2.26.3 no changes
- 2.23.0 08/16/19
- 2.22.1 → 2.22.5 no changes
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.10.5 → 2.20.5 no changes
- 2.9.5 07/30/17
- 2.8.6 no changes
- 2.7.6 07/30/17
- 2.6.7 05/05/17
- 2.4.12 → 2.5.6 no changes
- 2.3.10 09/28/15
- 2.1.4 → 2.2.3 no changes
- 2.0.5 12/17/14
RESUMO
git cherry-pick [--edit] [-n] [-m <parent-number>] [-s] [-x] [--ff] [-S[<keyid>]] <commit>… git cherry-pick (--continue | --skip | --abort | --quit)
DESCRIÇÃO
Com um ou mais commits existentes, aplique a alteração introduzida por cada um deles, registrando um novo commit individualmente. Isso exige que a sua árvore de trabalho esteja limpa (sem alterações 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 caminhos conflitantes, o arquivo do índice registra até três versões, conforme descrito na seção "TRUE MERGE" do git-merge[1]. Os arquivos da árvore de trabalho incluirão uma descrição do conflito entre os rotuladores de conflito usuais
<<<<<<<
e>>>>>>>
. -
Nenhuma outra modificação é feita.
Veja git-merge[1] para algumas dicas sobre como resolver tais conflitos.
OPÇÕES
- <commit>…
-
Faz os commits para "cherry-pick". Para obter uma lista mais completa de formas de escrever os commits, consulte gitrevisions[7]. Conjuntos dos commits que podem ser passadas, mas por predefinição, nenhuma travessia é feita, como se a opção
--no-walk
fosse especificada, consulte git-rev-list[1]. Observe que a especificação de um intervalo alimentará todos os argumentos <commit>… para uma única etapa da revisão (veja um exemplo posterior que usa 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 registrar o commit, acrescente uma linha que diga "(cherry picked from commit …)" à mensagem original do commit para indicar de qual commit essa alteração foi retirada. Isso é feito apenas para escolhas seletivas (cherry picks) sem conflitos. Não use essa opção se estiver fazendo uma seleção seletiva da sua ramificação privada, pois as informações são inúteis para o destinatário. Se, por outro lado, você estiver escolhendo entre duas ramificações visíveis publicamente (por exemplo, fazer o "backport" de uma correção para uma ramificação de manutenção para uma versão mais antiga de uma ramificação de desenvolvimento), adicionar estas informações pode ser útil.
- -r
-
Antigamente, o comando tinha como padrão fazer o
-x
descrito acima e o-r
era para desativá-lo. Agora, a predefinição é não fazer-x
, portanto, essa opção não funciona. - -m <parent-number>
- --mainline <número-relacionado>
-
Normalmente, não é possível selecionar uma mesclagem porque você não sabe qual lado da mesclagem deve ser considerado como principal. Esta opção especifica o "parent number" ou número principal (a partir de 1) da linha principal e permite que o cherry-pick reproduza a alteração em relação ao principal definido.
- -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 nomeado em sua árvore de trabalho e no índice, sem fazer qualquer commit. Além disso, quando esta opção é usada, seu índice não precisa corresponder ao commit do
HEAD
. A seleção seletiva (cherry-pick) é feita em relação ao estado inicial do seu índice.Isso é útil quando você seleciona mais de um efeito de commit para seu índice numa linha.
- -s
- --signoff
-
Adicione uma linha
Signed-off-by
no final da mensagem de confirmação. Consulte a opção signoff do comando git-commit[1] para obter mais informações. - -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
-
By default, cherry-picking an empty commit will fail, indicating that an explicit invocation of
git commit --allow-empty
is required. This option overrides that behavior, allowing empty commits to be preserved automatically in a cherry-pick. Note that when "--ff" is in effect, empty commits that meet the "fast-forward" requirement will be kept even without this option. Note also, that use of this option only keeps commits that were initially empty (i.e. the commit recorded the same tree as its parent). Commits which are made empty due to a previous commit will cause the cherry-pick to fail. To force the inclusion of those commits, use--empty=keep
. - --allow-empty-message
-
É predefinido que um commit com uma mensagem vazia falhe durante uma seleção seletiva (cherry-pick). Essa opção substitui este comportamento permitindo que os commits com mensagens vazias sejam escolhidas a dedo.
- --empty=(drop|keep|stop)
-
How to handle commits being cherry-picked that are redundant with changes already in the current history.
Note that
--empty=drop
and--empty=stop
only specify how to handle a commit that was not initially empty, but rather became empty due to a previous commit. Commits that were initially empty will still cause the cherry-pick to fail unless one of--empty=keep
or--allow-empty
are specified. - --keep-redundant-commits
-
Deprecated synonym for
--empty=keep
. - --strategy=<estratégia>
-
Use a estratégia de mesclagem fornecida. Deve ser utilizada apenas uma vez. Consulte a seção ESTRATÉGIAS DE MESCLAGEM do comando git-merge[1] for details.
- -X<opção>
- --strategy-option=<opção>
-
Encaminhe a opção específica da estratégia de mesclagem para a estratégia de mesclagem. Para mais detalhes consulte git-merge[1].
- --rerere-autoupdate
- --no-rerere-autoupdate
-
Depois que o mecanismo rerere reutilizar uma resolução registrada no conflito atual para atualizar os arquivos na árvore de trabalho, permita que ele também atualize o índice com o resultado da resolução. A opção
--no-rerere-autoupdate
é uma boa maneira de verificar novamente o que orerere
fez e detectar possíveis erros de mesclagem, antes de fazer o commit resultante no índice com um comandogit add
separado.
SEQUENCER SUBCOMANDOS
- --continue
-
Continue a operação em andamento usando as informações em
.git/sequencer
. Pode ser usado para continuar após uma falha da resolução de conflitos num "cherry-pick" ou numa reversão. - --skip
-
Ignore o commit atual e continue com o restante da sequência.
- --quit
-
Esqueça a operação atual em andamento. Pode ser usado para limpar a condição de falha do sequenciador após um "cherry-pick" ou uma reversão.
- --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
maint
ou do próximo, nem domaster
ou de qualquer um de seus ancestrais. Observe que o último não significamaint
e tudo entremaster
enext
; especificamente,maint
não será usado se estiver incluído emmaster
. -
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
-
Se o histórico for linear e
HEAD
for um ancestral do próximo, atualize a árvore de trabalho e avance o ponteiroHEAD
para a próxima correspondência. Caso contrário, aplique as alterações introduzidas por estes commits que estão próximos, mas não são oHEAD
do 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 numa ú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 cherry-pick --abort (3) $ git cherry-pick -Xpatience topic^ (4)
-
Aplica a alteração que seriam mostradas pelo
git show topic^
. Neste exemplo, a correção não se aplica de forma limpa, portanto, as informações sobre o conflito são gravadas no índice e na árvore de trabalho sem resultados de novos commits. -
resumir as alterações a serem reconciliadas
-
Cancela a escolha seletiva. Em outras palavras, retorne ao estado anterior à escolha seletiva, preservando todas as alterações locais que você tinha 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]