As respostas principais descrevem como aplicar as alterações de uma confirmação específica na ramificação atual. Se é isso que você quer dizer com "como mesclar", basta usar a opção de seleção de cereja, conforme sugerido.
Mas se você realmente deseja uma mesclagem , ou seja, deseja um novo commit com dois pais - o commit existente na ramificação atual e o commit do qual você deseja aplicar as alterações -, então uma seleção de cereja não fará isso.
Ter um histórico de mesclagem verdadeiro pode ser desejável, por exemplo, se seu processo de construção tirar proveito da ancestralidade git para definir automaticamente as strings de versão com base na tag mais recente (using git describe
).
Em vez de escolher a cereja, você pode fazer um real git merge --no-commit
e, em seguida, ajustar manualmente o índice para remover as alterações que você não deseja.
Suponha que você esteja no branch A
e deseje mesclar o commit na ponta do branch B
:
git checkout A
git merge --no-commit B
Agora você está configurado para criar um commit com dois pais, a dica atual confirma A
e B
. No entanto, você pode ter mais alterações aplicadas do que deseja, incluindo alterações de confirmações anteriores na ramificação B. Você precisa desfazer essas alterações indesejadas e confirmar.
(Pode haver uma maneira fácil de definir o estado do diretório de trabalho e o índice antes da mesclagem, para que você tenha uma lista limpa sobre a qual escolher em primeira mão o commit que você queria em primeiro lugar. Eu não sei como alcançar esse slate limpo. git checkout HEAD
E git reset HEAD
ambos removerão o estado de mesclagem, derrotando o objetivo deste método.)
Então, desfaça manualmente as alterações indesejadas. Por exemplo, você poderia
git revert --no-commit 012ea56
para cada confirmação indesejada 012ea56
.
Quando terminar de ajustar as coisas, crie seu commit:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Agora você tem apenas a alteração que deseja, e a árvore de ascendência mostra que você se uniu tecnicamente de B.