Como agrupar confirmações em um sistema de controle de versão como o git

9

Em vez de um histórico de consolidação único e longo, por que não existe uma hierarquia? Portanto, no nível superior, você pode receber solicitações, então você pode descer um nível e observar os commit nesse PR. Eu percebo que os RPs são específicos para o github, mas você entendeu. Apenas quero dizer agrupar uma série de confirmações como um recurso ou correção de erro, por exemplo.

Certamente isso tornaria o histórico de consolidação muito mais fácil de navegar.

Tenho certeza de que há uma resposta óbvia a essa pergunta, mas não consigo encontrá-la.

eggbert
fonte
1
Uma interface do usuário provavelmente poderia agrupar confirmações para exibição e navegação. Mas não parece universalmente útil o suficiente para conectar o núcleo (muito geral e independente do fluxo de trabalho).
Se as confirmações forem logicamente distintas, elas não deverão ser agrupadas. Se eles são logicamente partes de uma alteração, devem ser uma confirmação (é para isso que servem todas as coisas de rebase). E se estiverem relacionados, provavelmente estarão próximos e fáceis de encontrar.
Jan Hudec
Isso é feito conforme você descreve com o uso de branches, leia sobre feature-branches.
Iveqy
pergunte às pessoas que criaram o git, tenho certeza de que elas sabem por que tomaram suas decisões de design.
Jwenting
Eu concordo com o pôster conceitualmente. O fato de algo funcionar de uma certa maneira agora , não significa que deveria . Pessoalmente, eu uso o "squash merge" frequentemente para resumir vários commits em um e coloco isso no branch master. O nível de detalhe que quero ver no mestre é maior do que no desenvolvimento, por exemplo. O problema disso é que basicamente não há relação entre o commit de squash recém-criado e os commit que o originaram. Eu certamente posso imaginar ser capaz de agrupar vários commits em um, que por si só um commit com um claro antes e depois
Daniel Langdon

Respostas:

9

Há um longo histórico de confirmação simples porque as alterações são seqüenciais. Cada um constrói no estado 'antes' e deixa um estado 'depois'. Seria difícil ter mudanças que não refletissem isso.

Uma opção para agrupar alterações relacionadas é usar tags - http://git-scm.com/book/en/Git-Basics-Tagging, embora sejam mais usadas para marcar um ponto na história em vez de agrupar confirmações diferentes.

Para agrupar confirmações em outras maiores, você também pode fazer o rebasing interativo.

Ramificações são uma opção. Você pode criar uma ramificação e fazer vários commits relacionados logicamente. Você pode mesclar essas confirmações novamente no mestre, conforme desejado - provavelmente usando a --no-ffopção

A relação entre as ramificações também pode ser vista em ferramentas visuais, como gitg / gitx insira a descrição da imagem aqui

Michael Durrant
fonte
0

Eu tive o mesmo problema pensando nisso até descobrir que o Git numera seus ramos principais. Diante disso, as confirmações de mesclagem geralmente irritantes que são geradas podem ser consideradas nós de resumo. E todos os detalhes extras podem ser banidos da visualização, deixando um único histórico linear resumido.

Confira esta postagem no blog para obter detalhes e exemplos.

Daniel Langdon
fonte
0

Você agrupa confirmações em ramificações: cada ramificação é um conjunto de confirmações. Quando você mescla confirmações, você está colocando um conjunto de confirmações dentro de outra ramificação, construindo efetivamente uma hierarquia de confirmações: ramificação principal, recursos, bugs, experimentos, o nome dele.

Idealmente, sua ramificação principal é uma sucessão de confirmações de mesclagem. Se você olhar apenas para os primeiros pais (os comandos git aceitam essa opção), você terá uma visão de alto nível do seu histórico (esperamos que você escreva um commit de mesclagem significativo, não o gerado automaticamente). Mas quando você olha para o segundo, terceiro, etc. pais de uma mesclagem em seu histórico, está abrindo a caixa para ver o que há dentro de uma mesclagem. Aqui você tem detalhes do que aconteceu.

coredump
fonte