Meu cenário é que tenho um branch no qual fiz grandes melhorias no processo de construção (branch A) e em outro estou trabalhando em um recurso não relacionado (branch B). Então, agora, quando estou hackeando o branch B, quero extrair o que escrevi no branch A porque quero compilações mais rápidas e fáceis. No entanto, eu não quero "poluir" meu branch B, apenas adicionar alterações do branch A às alterações não planejadas.
O que eu tentei (quando estava no branch B):
git merge --no-commit branchA
Não funciona porque coloca você dentro de uma fusão. Do contrário, seria perfeito.
git checkout branchA -- .
Não funciona porque aplica alterações entre branchA..branchB e não as alterações master..branchA.
Algo mais?
Editar: Sim, as alterações na ramificação A são confirmadas. Neste exemplo, há apenas uma ramificação com melhorias de construção, mas pode haver até N ramificações com melhorias de construção que desejo aplicar enquanto trabalho em uma ramificação de recurso.
Respostas:
Eu só tive que fazer algo semelhante e fui capaz de consertar adicionando
--squash
ao comando mergefonte
git commit —amend
e ele irá anexar as novas alterações ao último commit, só não tenho certeza se funciona em commits de mesclagemcherry-pick -n
deve fazer o que você quer, mas eu não tenho certeza porque você quer as melhorias de compilação como mudanças não testadas - isso apenas torna várias coisas mais difíceis (por exemplo, mesclar outras mudanças aos arquivos modificados ou rebasing qualquer coisa).Nesse caso, eu criaria um novo branch, C, que você mescla de A e B (e quaisquer outros branches com melhorias de construção). Faça commit das mudanças na ramificação do recurso, B, e então mescle-as na ramificação C, que agora contém as melhorias de construção e as mudanças na ramificação do recurso, para que você possa testá-las juntas. Se você precisar fazer mais alterações, faça-o no branch apropriado, não em C, então mescle para C. Portanto, nunca altere nada no branch C, apenas use-o para integrar as alterações de outros branches.
Isso significa que você pode usar todos os recursos do Git no branch C, em vez de fazer malabarismos com mudanças não consolidadas em uma árvore suja.
fonte
cherry-pick -n
: Criei uma cópia de trabalho do meu código adicionando muitas coisas a lugares aleatórios. Agora eu quero limpar meu código antes de me comprometer com o branch desse recurso. Então eu mudo para um branch temporário, confirmo todas as alterações. Volte para o branch de recursos,cherry-pick
esse commit. Existe um jeito melhor de fazer isso?Você deve ser capaz de escolher os commits (
-n
para evitar cometer imediatamente).fonte
Não tenho 100% de certeza se entendi claramente, mas no meu caso acabei de criar um patch diff entre os branches e depois apliquei esse caminho no branch B.
No ramo A:
fonte
Não tenho certeza se entendi seus requisitos.
Você pode executar uma fusão e, em seguida, chamar
git reset HEAD~1
.A sequência a seguir deve repetir todos os commits entre
master
ebranchA
apósbranchB
. As confirmações que já foram aplicadas embranchB
serão ignoradas.fonte
--soft
opção se você não quiser as mudanças na área de teste. Você poderia desenhar um gráfico de como seus ramos estão configurados?