Mesclar commit vs squash

Não sei ao certo se entendi sua pergunta (talvez você possa dar um exemplo mais detalhado), mas tente executar o "git log master..oldbranch", que deve fornecer uma lista de confirmações que não são alcançáveis ​​pelo mestre, mas são alcançáveis do oldbranch. Consulte http://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html para especificar intervalos.

Portanto, um dos problemas com o esmagamento é que você perde essas informações detalhadas. Se você não editou a mensagem de confirmação padrão na confirmação de squash, poderá ter algumas informações lá. Caso contrário, acho que a melhor abordagem seria fazer algo como git merge --squash --nocommit featurebranch e examinar a saída para informar o que teria acontecido. Basicamente, fazendo um "dry-run". Se a mesclagem não alterar nenhum arquivo, você provavelmente poderá assumir que ele já foi aplicado.

O esmagamento quebrará todo o seu histórico, você não pode dizer qual foi o seu commit original, a menos que você o rastreie fora do git, por exemplo: em seus recursos em um Kanban ou como comentários.

Portanto, sua ramificação principal será mais limpa, mas não haverá uma maneira adequada de dizer quais confirmações foram mescladas e para onde.

Se você combiná-lo com rebase / cherrypick, será muito mais confuso, pois não haverá como rastrear algum código.

Então, pessoalmente, apenas esmagaria meus próprios commits micro dev, com rebase -i para torná-lo um commit viável adequado, mas não nos ramos de lançamento.

Uma alternativa seria a seguinte: você usa um release + um ramo de desenvolvimento e, no seu desenvolvedor, pressiona seus commits médios e, no final da iteração, pode espremer a fusão de dev para release, porque nesse ponto os dois ramo deve ser igual em conteúdo. Mas isso só funciona, porque você verá seus commits no ramo dev e poderá ver o que é mesclado de onde. E o lançamento terá confirmações enormes no final de cada iteração.