Como não comprometer nenhuma alteração e nova mensagem?


136

Como faço para criar uma nova commite criar uma nova mensagem se nenhuma alteração for feita nos arquivos?

Isso não é possível, pois o código do commit (SHA?) Será o mesmo?

Respostas:


168

Raramente há um bom motivo para fazer isso, mas o parâmetro é --allow-emptypara confirmações vazias (nenhum arquivo foi alterado), ao contrário --allow-empty-messagedas mensagens de confirmação vazias. Você também pode ler mais digitando git help commitou visitando a documentação online .

Enquanto o objeto da árvore (que possui um hash próprio) será idêntico, o commit terá um hash diferente, pois provavelmente terá um carimbo de data e hora e mensagem diferentes e definitivamente terá um commit pai diferente. Todos esses três fatores são integrados ao gitalgoritmo de hash do objeto.


Não são algumas razões que você pode querer um vazio commit (incorporando alguns dos comentários):

  • Como "confirmação declarativa", para adicionar narração ou documentação (via DavidNeiss ), incluindo dados posteriores sobre a aprovação em testes ou fiapos (via Robert Balicki ).
  • Para testar gitcomandos sem gerar alterações arbitrárias (via Vaelus ).
  • Para recriar um repositório simples excluído usando gitolite(via Tatsh ).
  • Para criar arbitrariamente uma nova confirmação, como para reativar as ferramentas de construção (via mattLummus ) ou para fins de registro ou métricas pessoais (via DynamiteReed ). No entanto, pense duas vezes: dependendo da estrutura de ramificação / mesclagem, as confirmações podem permanecer por muito tempo, portanto, uma estratégia de "não comprometer nada" pode inadvertidamente poluir o repositório da sua equipe com artefatos de fluxo de trabalho temporários e dificultar a separação de revisões de código de crosta efêmera.

Outras estratégias para adicionar metadados a uma árvore de consolidação incluem:

  • Ramificações separadas ou tags leves que sempre apontam para uma confirmação de um status específico (por exemplo, "última confirmação aceita" ou "confirmação temporária atual").
  • Tags anotadas para uma maneira de registrar registro de data e hora, confirmador e mensagem, apontando para uma confirmação existente sem adicionar uma entrada na própria árvore de confirmação.
  • git notes para associar uma nota mutável em cima de uma confirmação imutável existente.

2
Comecei a seguir o modelo de ramo de fluxo git . Quando você cria um devformulário de ramificação mastere, em seguida feat, imediatamente uma ramificação dev, a featramificação parece vir da masterramificação, pois não há confirmação distinta na devramificação da qual a featramificação vem. Uma confirmação vazia quando você devcria a devramificação pela primeira vez ajuda a estabelecer a ramificação como sua ramificação indefinidamente duradoura e independente master. Geralmente é útil quando você usa ramificações como camadas e cria duas camadas a partir de uma única confirmação.
Novice C

2
Outro motivo: se você omitir algo importante da sua mensagem de confirmação antes de enviar, não poderá fazê-lo commit --amendse o controle remoto não permitir o envio forçado. Dessa forma, você pode permitir que os desenvolvedores vejam uma mensagem importante que acompanha o commit anterior.
21817 Andy J #

1
Quero fazer isso porque enviei uma confirmação, mas esqueci de mencionar algo na mensagem de confirmação. Nossas mensagens de confirmação são integradas ao software de rastreamento de problemas e integração contínua e o conteúdo da mensagem de confirmação afeta esses aplicativos. Existe uma maneira melhor? Esta parece ser a melhor solução no meu caso. A única coisa que posso imaginar seria, de alguma forma, poder reverter o commit anterior.
Sytech

1
Eu apenas usei isso para disparar nosso gancho de pré-confirmação, que executa scripts no banco de dados. Portanto, houve mudanças, apenas o git não pôde vê-las até depois que o script foi executado. Poderia executá-lo manualmente, é claro, mas isso executaria o script duas vezes.
yoyodyn

1
Muito útil ao interagir com o rastreamento de problemas embutido nos servidores git como github e gogs.
SimonF 29/04/19

37

Se eu entendi direito, você deseja fazer um commit vazio. Nesse caso, você precisa:

git commit --allow-empty

35

Confirmação vazia com uma mensagem

git commit --allow-empty -m "Empty test commit"

Confirmação vazia com uma mensagem vazia

git commit --allow-empty --allow-empty-message

3

Se você estiver usando um sistema como o gitversion, faz muito sentido fazer esse tipo de confirmação. Você pode ter um commit específico para aumentar a versão principal usando um comentário + semver: major.


3

Talvez como uma alternativa mais sensata, você possa criar uma tag anotada (uma confirmação nomeada com uma mensagem). Veja a git tag -aopção

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.