Comment ne commettre aucun changement et nouveau message?

137

Comment puis-je commitcréer un nouveau message et créer un nouveau message si aucune modification n'est apportée aux fichiers?

N'est-ce pas possible puisque le code du commit (SHA?) Sera le même?

d -_- b
la source

Réponses:

168

Il y a rarement une bonne raison de faire cela, mais le paramètre est --allow-emptypour les commits vides (aucun fichier modifié), contrairement aux --allow-empty-messagemessages de commit vides. Vous pouvez également en savoir plus en tapant git help commitou en visitant la documentation en ligne .

Alors que l'objet arborescence (qui a son propre hachage) sera identique, le commit aura en fait un hachage différent, car il aura vraisemblablement un horodatage et un message différents, et aura certainement un commit parent différent. Ces trois facteurs sont intégrés dans gitl'algorithme de hachage d'objet de.


Il y a plusieurs raisons pour lesquelles vous pourriez vouloir un commit vide (incorporant certains des commentaires):

  • En tant que «commit déclaratif», pour ajouter une narration ou de la documentation (via DavidNeiss ) y compris des données après coup sur la réussite des tests ou de la charpie (via Robert Balicki ).
  • Pour tester des gitcommandes sans générer de changements arbitraires (via Vaelus ).
  • Pour recréer un référentiel nu supprimé en utilisant gitolite(via Tatsh ).
  • Pour créer arbitrairement un nouveau commit, par exemple pour redéclencher l' outillage de build (via mattLummus ) ou pour des raisons de journalisation personnelle ou de métriques (via DynamiteReed ). Cependant, réfléchissez à deux fois: en fonction de votre structure de branche / fusion, les validations peuvent durer très longtemps, donc une stratégie "juste ne rien commettre" peut polluer par inadvertance le référentiel de votre équipe avec des artefacts de flux de travail temporaires et rendre difficile la séparation des révisions de code de cruft éphémère.

D'autres stratégies pour ajouter des métadonnées à une arborescence de validation incluent:

  • Des branches séparées ou des balises légères qui pointent toujours vers un commit d'un statut particulier (par exemple "dernier commit accepté" ou "commit de préparation actuel").
  • Balises annotées pour un moyen d'enregistrer l'horodatage, le committer et le message, pointant vers un commit existant sans ajouter d'entrée dans l'arborescence de commit lui-même.
  • git notes pour associer une note mutable au-dessus d'un commit immuable existant.
Jeff Bowman
la source
2
J'ai commencé à suivre le modèle de branche git flow . Lorsque vous créez un devformulaire de branche master, puis une featbranche immédiatement à partir de dev, la featbranche semble provenir de la masterbranche car il n'y a pas de commit distinctif sur la devbranche d'où featprovient la branche. Un commit vide lorsque vous créez la devbranche pour la première fois aide à établir la devbranche comme étant sa propre branche indéfiniment durable indépendante de master. En règle générale, il est utile d'utiliser des branches comme couches et de créer deux couches à partir d'un seul commit
Novice C
2
Une autre raison: si vous omettez quelque chose d'important dans votre message de validation avant de pousser, vous ne pouvez pas le faire commit --amendsi la télécommande ne permet pas de forcer la poussée. De cette façon, vous pouvez permettre aux développeurs de voir un message important qui accompagne le commit précédent.
Andy J
1
Je veux faire cela parce que j'ai poussé un commit, mais j'ai oublié de mentionner quelque chose dans le message de commit. Nos messages de validation sont intégrés au logiciel de suivi des problèmes et d'intégration continue et le contenu du message de validation affecte ces applications. Y a-t-il un meilleur moyen? Cela semble être la meilleure solution dans mon cas. La seule chose que je peux imaginer serait de pouvoir revenir d'une manière ou d'une autre au commit précédent.
sytech
1
Je viens de l'utiliser pour déclencher notre hook pré-commit, qui script la base de données. Donc, il y avait des changements, juste git ne pouvait les voir qu'après l'exécution du script. J'aurais pu l'exécuter manuellement bien sûr, mais cela exécuterait le script deux fois.
yoyodyn
1
Très utile lors de l'interaction avec le suivi des problèmes intégré aux serveurs git comme github et gogs.
SimonF
37

Si je vous ai bien compris, vous voulez faire un commit vide. Dans ce cas, vous avez besoin de:

git commit --allow-empty
Dima
la source
35

Validation vide avec un message

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

Validation vide avec un message vide

git commit --allow-empty --allow-empty-message
Adobels
la source
3

Si vous utilisez un système comme gitversion, il est très logique de faire ce genre de commit. Vous pourriez avoir un commit qui est spécifiquement pour boper la version majeure en utilisant un + semver: commentaire majeur.

Kevin Johnson
la source
3

Peut-être comme alternative plus judicieuse, vous pouvez créer une balise annotée (un commit nommé avec un message). Voir l' git tag -aoption.

Kan
la source