2012-09-18 14 views
68

Come posso creare un nuovo commit e creare un nuovo messaggio se non vengono apportate modifiche ai file?Come non eseguire alcuna modifica e nuovo messaggio?

Non è possibile poiché il codice di commit (SHA?) Sarà lo stesso?

+0

Altro per le note che per il codice stesso. –

+1

Invece di fare quello che stai chiedendo, usa invece 'git notes'. – wjl

+2

@iight Se non hai spinto il tuo codice ovunque, considera anche 'git commit --amend'. Questo ti riporterà alla schermata di commit in cui puoi modificare il tuo messaggio e aggiungere file extra al commit se li hai messi in scena. Tieni presente che, come un rebase, ciò farà sì che il commit originale sia obsoleto e potrebbe causare un brutto mal di testa per chiunque stia basando il codice sul vecchio commit. –

risposta

91

C'è raramente una buona ragione per farlo, ma il parametro è --allow-empty per i commit vuoti, a differenza di --allow-empty-message per i messaggi vuoti. Puoi anche leggere di più digitando git help commit o visitando the online documentation.

Mentre l'oggetto tree (che ha un hash proprio) sarà identico, il commit avrà in realtà un hash diverso, perché presumibilmente avrà un timestamp e un messaggio diversi, e avrà sicuramente un commit padre diverso. Tutti e tre questi fattori sono integrati nell'algoritmo hash dell'oggetto git.


Ci sono alcuni motivi si potrebbe desiderare un vuoto commit (che incorpora alcune delle osservazioni):

  • Come un "dichiarativa commit", per aggiungere la narrazione o la documentazione (via DavidNeiss) inclusi dati post-vendita relativi al superamento di test o lanugine (tramite Robert Balicki).
  • Per testare i comandi git senza generare modifiche arbitrarie (tramite Vaelus).
  • Per ricreare un repository nudo cancellato utilizzando gitolite (via Tatsh).
  • Per creare arbitrariamente un nuovo commit, ad esempio per riattivare gli strumenti di compilazione (tramite mattLummus) o per motivi di registrazione o metrica personale (tramite BlueJ774). Tuttavia, pensaci due volte: a seconda della struttura di branch/merge, i commit potrebbero vivere per un tempo molto lungo, quindi una strategia "just commit nothing" potrebbe inavvertitamente inquinare il repository del tuo team con risorse temporanee del workflow e rendere difficile la separazione delle revisioni del codice da effimero cruft.

Altre strategie per aggiungere metadati a un albero di impegnarsi includono:

  • rami separati o tag leggeri che puntano sempre ad un commit di uno status particolare (ad esempio, "l'ultimo accettato commit" o "messa in scena corrente commettono ").
  • Annotated Tags per un modo di registrare timestamp, committer e messaggio, puntando a un commit esistente senza aggiungere una voce nell'albero commit stesso.
  • git notes per associare una nota mutevole a un commit immutabile esistente.
+1

Ho iniziato a seguire il flusso git [modello di ramo] (http://nvie.com/posts/a-successful-git-branching-model/). Quando si crea un ramo 'dev' di' master' e quindi un ramo 'feat' immediatamente da' dev', il ramo 'feat' sembra provenire dal ramo' master' in quanto non ci sono commit di distinzione su 'dev' ramo da cui proviene il ramo 'feat'. Un commit vuoto quando crei per la prima volta il ramo 'dev' aiuta a stabilire il ramo' dev' in quanto è un ramo a durata indefinita indipendente da 'master'. Generalmente è utile quando si usano i rami come livelli e si creano due livelli da un singolo commit –

+0

Un altro motivo: se si omette qualcosa di importante dal messaggio di commit prima di premere, non è possibile eseguire 'commit --amend' se il telecomando non lo fa consentire la spinta della forza. In questo modo puoi consentire agli sviluppatori di vedere un messaggio importante che accompagna il commit precedente. –

+0

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

19

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

git commit --allow-empty 
2

Forse come un più valida alternativa, è possibile creare un tag annotated (un nome di commit con un messaggio). Vedere l'opzione git tag -a.

0

Se si utilizza un sistema come gitversion È consigliabile eseguire questo tipo di commit. Potresti avere un commit che è specifico per il bumping della versione principale usando un semiver +: commento principale.

4

vuoto di commit con un messaggio

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

vuoto di commit con un messaggio vuoto

git commit --allow-empty --allow-empty-message 
Problemi correlati