Come eseguire il commit di nessun cambiamento e nuovo messaggio?


137

Come posso commitcrearne uno nuovo e creare un nuovo messaggio se non vengono apportate modifiche ai file?

Questo non è possibile poiché il codice del commit (SHA?) Sarà lo stesso?

Risposte:


168

Raramente c'è una buona ragione per farlo, ma il parametro è --allow-emptyper commit vuoti (nessun file modificato), al contrario di --allow-empty-messageper messaggi di commit vuoti. Puoi anche leggere di più digitando git help commito visitando la documentazione online .

Mentre l'oggetto albero (che ha un hash proprio) sarà identico, il commit avrà effettivamente un hash diverso, perché presumibilmente avrà un timestamp e un messaggio diversi e avrà sicuramente un commit genitore diverso. Tutti e tre questi fattori sono integrati gitnell'algoritmo di hash degli oggetti.


Ci sono alcuni motivi si potrebbe desiderare un vuoto commit (che incorpora alcuni dei commenti):

  • Come "impegno dichiarativo", aggiungere narrazione o documentazione (tramite DavidNeiss ), compresi i dati di fatto sul superamento di test o filacce (tramite Robert Balicki ).
  • Per testare i gitcomandi senza generare modifiche arbitrarie (tramite Vaelus ).
  • Per ricreare un repository nudo eliminato utilizzando gitolite(tramite Tatsh ).
  • Per creare arbitrariamente un nuovo commit, ad esempio per riattivare gli strumenti di compilazione (tramite mattLummus ) o per motivi di registrazione personale o metriche (tramite DynamiteReed ). Tuttavia, pensaci due volte: a seconda della struttura di succursale / unione, i commit potrebbero durare a lungo, quindi una strategia "non impegnare nulla" potrebbe inquinare inavvertitamente il repository del tuo team con artefatti temporanei del flusso di lavoro e rendere difficile separare le revisioni del codice da innesto effimero.

Altre strategie per aggiungere metadati a una struttura di commit includono:

  • Separare rami o tag leggeri che indicano sempre un commit di uno stato particolare (ad es. "Ultimo commit accettato" o "commit di gestione temporanea corrente").
  • Tag annotati per un modo per registrare data / ora, committer e messaggio, che punta a un commit esistente senza aggiungere una voce nella struttura di commit stessa.
  • git notes associare una nota mutabile in aggiunta a un commit immutabile esistente.

2
Ho iniziato a seguire il modello di diramazione del flusso git . Quando si crea una devforma di ramo mastere quindi featimmediatamente un ramo dev, il featramo sembra provenire dal masterramo poiché non esiste alcun commit distintivo sul devramo da cui featproviene il ramo. Un commit vuoto quando si effettua per la prima volta il devramo aiuta a stabilire il devramo poiché è indipendente dal proprio ramo a tempo indeterminato master. Generalmente è utile quando si utilizzano i rami come livelli e si creano due livelli da un singolo commit
Novizio C

2
Un altro motivo: se si omette qualcosa di importante dal messaggio di commit prima di spingere, non è possibile farlo commit --amendse il telecomando non consente di forzare la spinta. In questo modo puoi consentire agli sviluppatori di vedere un messaggio importante associato al commit precedente.
Andy J,

1
Voglio farlo perché ho inviato un commit, ma ho dimenticato di menzionare qualcosa nel messaggio di commit. I nostri messaggi di commit sono integrati con il software di tracciamento dei problemi e integrazione continua e il contenuto del messaggio di commit influenza tali applicazioni. C'è un modo migliore? Questa sembra la migliore soluzione nel mio caso. L'unica cosa che posso immaginare sarebbe in qualche modo riuscire a ripristinare il commit precedente.
sytech,

1
Ho appena usato questo per innescare il nostro hook pre-commit, che script il database. Quindi c'erano dei cambiamenti, solo Git non poteva vederli fino a dopo l'esecuzione dello script. Avrebbe potuto eseguirlo manualmente, ovviamente, ma avrebbe eseguito lo script due volte.
yoyodyn,

1
Molto utile quando si interagisce con il rilevamento dei problemi incorporato nei server git come github e gogs.
SimonF

37

Se ti ho capito bene, vuoi fare un commit vuoto. In tal caso è necessario:

git commit --allow-empty

35

Svuota commit con un messaggio

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

Svuota commit con un messaggio vuoto

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

3

Se stai usando un sistema come gitversion Ha molto senso fare questo tipo di commit. Potresti avere un commit specifico per eseguire il bump della versione principale usando un + semver: commento principale.


3

Forse come alternativa più sensata, potresti creare un tag con annotazioni (un commit con un messaggio). Vedi l' git tag -aopzione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.