Estou usando o Git há cerca de um ano e acho fantástico, mas comecei uma segunda versão do projeto e iniciei uma nova ramificação para ele. Estou lutando um pouco com a melhor maneira de lidar com as coisas daqui para frente.
Eu tenho dois ramos chamados dizer master10 (para v1) e master20 (para v2). Venho fazendo correções de erros na v1 na ramificação master10 e desenvolvendo coisas novas da master20. Sempre que faço uma correção de erro, mesclo-a na v2, verificando master20 e fazendo git merge master10
. Por enquanto, tudo bem.
Agora, no entanto, fiz uma alteração na v1 que não quero na v2, mas quero continuar mesclando outras correções. Como eu digo ao Git para ignorar esse commit específico (ou um intervalo de commits), mas que daqui para frente eu ainda quero mesclar outras correções de bugs.
Eu pensei que git rebase
poderia ser o que eu precisava, mas li o documento e minha cabeça quase explodiu.
Eu acho que o que eu quero é algo como um comando "git sync" que diga ao git que agora duas ramificações estão sincronizadas e, no futuro, apenas mesclam as confirmações a partir deste ponto de sincronização.
Qualquer ajuda apreciada.
fonte
O IMHO, a coisa mais lógica a fazer, é mesclar tudo e usar o git revert (commit_you_dont_want) para removê-lo .
Exemplo:
Se você possui vários confirmações "a ignorar" ou deseja editar a mensagem de reversão:
Então seu histórico pode parecer com:
Se você tiver conflitos envolvendo SOMENTE esses "para ignorar" confirmações, você pode usar:
Portanto, sua versão persistirá sobre a outra. Mesmo sem mensagens de erro, você ainda pode "reverter" essas confirmações indesejadas, pois elas podem ter outras alterações que não entraram em conflito e você ainda não as deseja.
Se houver conflitos envolvendo NÃO SOMENTE as confirmações de "ignorar", você deve resolvê-los manualmente e provavelmente precisará resolvê-los novamente durante a reversão.
fonte
As confirmações incluem ascendência. Você não pode mesclar uma confirmação sem mesclar confirmações anteriores.
Você pode escolhê-los com cereja, é claro. Esse fluxo é bom quando você tem uma ramificação que está no modo de manutenção.
fonte
Parece um caso clássico de 'git cherry-pick' https://git-scm.com/docs/git-cherry-pick; ele faz exatamente o que parece
fonte
Uma espécie de anúncio para o meu projeto que basicamente envolve o processo descrito por @araqnid.
É uma espécie de auxiliar que apresenta o seguinte fluxo GIT:
Uma citação da página do projeto:
fonte
Crie uma terceira ramificação para as alterações desejadas no master10, mas não no master20. Sempre considere master10 como seu "mestre", o ramo mais estável de todos. A ramificação com a qual todas as outras ramificações desejam manter sempre sincronizadas.
fonte
Em vez de
revert
oucherry-pick
para esse caso, você precisa que o git considere as mudanças que você está pulando como sendo mais antigas que as que você fez.Assim:
git merge ccc
git merge fff --no-commit
git merge --continue
git merge source-branch-head
Após a Etapa 4, o git considerará seu ramo mais recente que o commit, já que você já lidou com ele (escolhendo manter SUAS versões das coisas).
fonte