Questão Qual é a melhor maneira de acompanhar as mudanças locais em um projeto via Git, além de acompanhar as correções de bugs?


Na universidade onde trabalho, usamos um sistema de gerenciamento de aprendizado de código aberto (Moodle). Com o tempo, editamos o código-fonte diretamente para corrigir os erros que encontramos e fornecer funcionalidade personalizada. Gostaria de poder acompanhar as correções de bugs por meio de um repositório Git, além de acompanhar nossas alterações e garantir que nossas edições sejam preservadas.

Eu sou um parente novato do Git, mas pelo que posso dizer aqui é a nossa situação atual.

     --C----C----C----C----C   < custom
    /
---B-----F-----F-----F-----F-----F-----F--...   < origin

B = the build we installed
C = our changes
F = bug fixes

Minha pergunta, para resumir, é como combinar os C e os F juntos. Fusão? Rebasing Qual árvore devo fundir / rebase para o outro?


1


origem


Eu não estou dizendo que a pergunta não é válida para SU, mas se você perguntar no Stack Overflow, você encontrará muito mais usuários do Git, eu suspeito. - CarlF
A resposta do whitequark funciona muito bem. Eu posso ver apenas as alterações no ramo personalizado executando git log --first-parent - Michelle Tilley
Observe que muitas vezes é vantajoso para todas as partes se correções de bugs forem upstream, não apenas por essa razão: manter um branch local atualizado pode exigir um trabalho desnecessário. Quando os arquivos começam a divergir, as coisas ficam complicadas. - Daniel Andersson


Respostas:


Mesclar e rebasing estão basicamente fazendo o mesmo: fazer com que o último commit incorpore mudanças de ambas as ramificações fornecidas. Mas a maneira como eles fazem isso é diferente.

Mesclar cria um commit que tem dois especificados como pais, e rebasing 'move' sua árvore para que o primeiro commit seja baseado (ou seja, tem um pai) no último commit de outro branch (origem no seu caso). O estado da árvore resultante é idêntico.

A coisa certa a fazer neste caso é mesclar custom ramo com origin:

git checkout custom
git merge origin

Rebasing só é útil se você quiser enviar um monte de patches para o mantenedor de projetos, para que ele não precise adaptá-los às mudanças mais recentes manualmente.

Rebasing comandos seria:

git checkout custom
git rebase origin

Também existe um comando git-cherry-pick (1) que pode ser usado para aplicar um commit arbitrário de qualquer branch como um patch seria.


3