Git commit senza messaggio di commit


108

Come posso eseguire il commit delle modifiche senza specificare il messaggio di commit? Perché è richiesto per impostazione predefinita?


6
Infine, git commit -a --allow-empty-message -m ''non aprirà nemmeno più un editor. Vedi la mia risposta di seguito
VonC

2
Su Windows questo comando git commit -a --allow-empty-message -m ''marche commettono con messaggio di commit " ''", quindi è meglio utilizzare questo comando: git commit -a --allow-empty-message -m "".
tav

Risposte:


137

git generalmente richiede un messaggio non vuoto perché fornire un messaggio di commit significativo fa parte di una buona pratica di sviluppo e di una buona gestione del repository. La prima riga del messaggio di commit viene utilizzata ovunque all'interno di git; per ulteriori informazioni, leggi "Una nota sui messaggi Git Commit" .

Se apri Terminal.app, cdnella directory del tuo progetto e git commit -am ''vedrai che fallisce perché non è consentito un messaggio di commit vuoto. Le versioni più recenti di git hanno l'
--allow-empty-messageargomento della riga di comando, inclusa la versione di git inclusa nell'ultima versione di Xcode. Questo ti permetterà di usare questo comando per fare un commit con un messaggio vuoto:

git commit -a --allow-empty-message -m ''

Prima della --allow-empty-messagebandiera, dovevi usare il commit-treecomando idraulico. Puoi vedere un esempio di utilizzo di questo comando nel capitolo "Raw Git" del libro Git .


1
Le versioni più recenti di githanno l' --allow-empty-messageargomento della riga di comando. Consulta la documentazione qui . Menziona che eri in grado di realizzare la stessa cosa usando il comando idraulico git-commit-tree.
Jeremy W. Sherman

18
Penso che la frase "fornire un messaggio di commit significativo fa parte di una buona pratica di sviluppo" sia semplicemente sbagliata - si può dire che fornire un messaggio di commit significativo è considerato parte di una buona pratica di sviluppo, poiché l'affermazione è comunque divisiva - io per primo credo che meno informazioni a volte portino a meno confusione, soprattutto perché git ovviamente memorizza le modifiche effettive al repository e git diffmostrerà alla parte interessata esattamente cosa contiene un commit, senza fare affidamento su descrizioni scritte umane. Le macchine dovrebbero salvarci dal lavoro ove possibile.
amn

2
@amn, ho anche iniziato a chiedermi su tutte quelle decine di migliaia di messaggi di commit ben scritti che ho scritto che non saranno mai letti da nessuno. Per me ora il valore di questa abitudine è che mi costringe a guardare attraverso i cambiamenti nel tentativo di descriverli, e questo a volte mi fa notare dei bug. Hai ragione, però. Considererò di prestare maggiore attenzione al codice e meno al messaggio di commit.
osa

7
Git non è più utilizzato solo per lo sviluppo di codice. Quando aggiorno una pagina wiki di GitHub o un documento LaTeX sul retro, di solito non c'è niente da dire perché sto aggiornando la documentazione. Tutto ciò che semanticamente significativo riguardo al cambiamento è contenuto nel diff. In realtà mi sono ritrovato a utilizzare il testo della modifica come messaggio di commit stesso: completamente ridondante!
Jim Pivarski

1
@amn, a volte l'output di git diffnon è autoesplicativo, anche quando il committer crede che lo sia.
cowlinator

26

E se aggiungi un alias allora è ancora meglio, giusto?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Ora fai solo un nccommit, nc a causa di nessun commento, e tutto dovrebbe essere vincolato.


19

Quando lavori su un importante aggiornamento del codice, se hai davvero bisogno di un safepoint intermedio potresti semplicemente fare:

git commit -am'.'

o più breve:

git commit -am.

E cosa fa?
fishinear

Aggiunge un commit con il messaggio "."
apatico il

Uso questo metodo quando non ho letteralmente alcun ricordo di ciò che ho inserito in un commit e sono troppo pigro per difftutto.
TheTechRobo36414519

16

Nota: a partire da git1.8.3.2 (luglio 2013), il seguente comando ( menzionato sopra da Jeremy W Sherman ) non aprirà più un editor:

git commit --allow-empty-message -m ''

Vedere commit 25206778aac776fc6cc4887653fdae476c7a9b5a :

Se viene specificato un messaggio vuoto con l'opzione -mdi git commit, l'editor viene avviato.
È inaspettato e non necessario.
Invece di usare la lunghezza della stringa del messaggio per controllare se l'utente ne ha specificata una, ricorda direttamente se è -mstata data l'opzione .


git 2.9 (giugno 2016) migliora il comportamento dei messaggi vuoti:

Vedere commit 178e814 (06 aprile 2016) di Adam Dinwoodie ( me-and) .
Vedere commit 27014cb (07 aprile 2016) di Jeff King ( peff) .
(Fuso da Junio ​​C Hamano - gitster- in commit 0709261 , 22 aprile 2016)

commit: non ignorare un messaggio vuoto fornito da -m ''

  • " git commit --amend -m '' --allow-empty-message", anche se sembra strano, è una richiesta valida per modificare il commit in modo da non avere alcun messaggio.
    A causa del rilevamento errato della presenza di -msulla riga di comando, abbiamo finito per mantenere il messaggio di registro dal commit originale.
  • " git commit -m "$msg" -F file" dovrebbe essere rifiutato se $msgè una stringa vuota o meno, ma a causa dello stesso bug, non è stato rifiutato quando $msgè vuoto.
  • " git -c template=file -m "$msg"" dovrebbe ignorare il modello anche quando $msgè vuoto, ma non l'ha fatto e ha invece utilizzato i contenuti del file modello.

3

Non hai bisogno di git per farlo. L'uso creativo di una funzione bash andrà benissimo. Se non ti interessano i messaggi, impostane uno predefinito e dimenticalo.

function gitcom() {
  git commit -m "my default commit message"
}

Se ti sentissi davvero avventuroso potresti aggiungere, impegnarti e spingere con un solo comando

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Quale saresti quindi eseguito come

gitzap origin master

Potresti anche andare più in profondità e usare parse_git_branch per salvarti alcune battiture lì, o impostare un valore predefinito comune di "origine" e "master".


1
Potresti fornire qualche dettaglio in più su come impostare questa funzione bash?
adaam

1
Supponendo che tu sia su OSX o Linux, puoi copiare queste funzioni e inserirle nel tuo .profile (dovrebbe essere nella tua cartella home, altrimenti crearlo). Apri una nuova finestra della console e quei comandi saranno disponibili per te. Qualsiasi modifica apportata a questi file richiederà di aggiornare la sessione bash in modo da poter velocizzare le cose aggiungendo i seguenti alias a quel file: alias ea = "subl ~ / .profile" # subl è il mio editor di testo, sostituiscilo con il tuo alias er = "source ~ / .profile" # questo si resetterà Ora quando vuoi aggiungere scorciatoie basta digitare "ea" (modifica alias) E per aggiornare er
Steven Garcia

2
Se hai chiamato gli script git-come git-zap(senza estensioni) e posizionato da qualche parte git loro (cioè da qualche parte nel PATH) riesce a trovare, li tratta come git normali comandi Git e li si può invocare in questo modo: git com,git zap origin master
Manuzor

1
in bash è o function gitcom {o gitcom() {TMK, aggiustare?

2

Git richiede un commit per avere un commento, altrimenti non accetterà il commit.

Puoi configurare un modello predefinito con git come messaggio di commit predefinito o puoi cercare il flag --allow-empty-message in git. Penso (non sicuro al 100%) che tu possa riconfigurare git per accettare messaggi di commit vuoti (che non è una buona idea). Normalmente ogni commit dovrebbe essere un po 'di lavoro descritto dal tuo messaggio.


1
Non sono sicuro del motivo per cui questa risposta è stata rifiutata. Sono d'accordo che forzare Git ad accettare messaggi di commit vuoti, o usare un messaggio come "save", sia una cattiva idea. Smettila di combatterlo e impara solo il dannato strumento.
Jezen Thomas,

2

Ho la seguente configurazione nel mio progetto privato:

git config alias.auto 'commit -a -m "changes made from [device name]"'

In questo modo, quando ho fretta, lo faccio

git auto
git push

E almeno so da quale dispositivo è stato effettuato il commit.


1

Ho trovato la soluzione più semplice:

git commit -am'save'

Questo è tutto, lavorerai attorno al messaggio di git commit.

puoi anche salvare quel consiglio in una festa o altre cose per renderlo più semplice.

I membri del nostro team scrivono sempre quei messaggi, ma quasi nessuno li vedrà più.

Il messaggio di commit è una cosa che uccide il tempo almeno nel nostro team, quindi lo ignoriamo.


-5

Il messaggio di commit è una best practice che dovrebbe essere seguita in ogni momento. A meno che tu non sia l'unico sviluppatore e questo non cambierà presto.

git commit -a -m 'asdfasdfadsfsdf'

è una specie di scherzo. Ma per i piccoli commit che DEVI fare per inviare le modifiche a heroku (ad esempio), va bene nella singola istanza dello sviluppatore.
coloradoblue
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.