Git commit apre un file di testo vuoto, per cosa?


93

In tutti i tutorial di Git che ho letto dicono che puoi fare:

git init
git add .
git commit

Quando lo faccio ottengo un grande file di testo aperto. Nessuno dei tutorial sembra affrontare questo problema, quindi non so cosa fare con il file o cosa inserire se non altro.

Risposte:


124

Hai lo scopo di mettere il messaggio di commit in questo file di testo, quindi salvare ed uscire.

Puoi cambiare l'editor di testo predefinito che git usa con questo comando:

git config --global core.editor "nano"

Devi cambiare nano in qualsiasi comando normalmente aprirebbe il tuo editor di testo.


15
Non è necessario aggiungere --globalper modificare l'impostazione predefinita?
Znarkus

4
@ Znarkus buon punto. Vedi qui per maggiori informazioni. Fondamentalmente, la risposta fornita cambierebbe solo l'impostazione per il progetto corrente, mentre la --globalmodifica per l'utente corrente e la --systemmodifica per tutti su quel computer.
Matt Fenwick

24
Sebbene questa risposta contenga buone informazioni, non affronta la domanda effettiva.
Adrian Schmidt

5
Non vedo perché questo ha il doppio dei voti positivi come alcune delle risposte che rispondono REALMENTE alla domanda. Questo non lo fa.
Johan

2
@Johan, non ti sbagli, ma dopo essermi imbattuto in questo, ho trovato questa risposta estremamente utile. Quindi l'ho votato.
Danation

65

Come accennato da Ben Collins , senza l' -m "..."argomento per digitare il commit inline (che generalmente è una cattiva idea in quanto ti incoraggia a essere breve), questo "grande file di testo" che viene aperto è una finestra in cui digitare il messaggio di commit .

Di solito si consiglia di scrivere un riepilogo nella prima riga, saltare una riga e quindi scrivere note più dettagliate sotto; questo aiuta i programmi che fanno cose come inviare per posta elettronica i messaggi di commit con un oggetto appropriato e l'elenco completo delle modifiche apportate nel corpo.

Invece di cambiare la EDITORvariabile della shell, puoi anche cambiare l'editor utilizzato aggiungendo le righe aggiuntive nel tuo ~/.gitconfigfile:

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Quella seconda riga in realtà non ha nulla a che fare con il tuo problema, ma la trovo davvero utile in modo da poter popolare il mio ~/.gitignorefile con tutti quei tipi di file che so che non vorrò mai, mai, impegnare in un repository.


36

Il file di testo che viene aperto è un riepilogo dell'operazione di commit corrente. Il commit git ti inserisce in questo file in modo che tu possa aggiungere un messaggio di commit all'inizio del file. Dopo aver aggiunto il messaggio, salva ed esci da questo file.

C'è anche un'opzione "-m msg" su questo comando che ti consente di aggiungere il messaggio di commit sulla riga di comando.


Ciao Lou, anch'io sono un principiante su GIt. Penso che dopo che esisto o scrivo ed esisto il file di testo, il git non ha effettivamente eseguito il commit dello staging e il messaggio di commit che sono stato appena scritto. Quindi, qual è il significato di aggiungere il messaggio a questo file di testo se non riesco a fare il commit dopo averlo scritto e uscito. (per favore correggimi se ho sbagliato, molte grazie)
SLN

@SLN Lo scenario che stai delineando non è molto chiaro. Provo a indovinare e suggerisco che forse non hai messo in scena alcun file per il commit, quindi il tuo tentativo di commit non ha avuto effetto. Utilizza "git add" per i file della prima fase che desideri eseguire il commit, quindi "git commit" per eseguire il commit effettivo.
Lou

15

Se sei su Mac OS X e utilizzi BBEdit, puoi impostarlo come editor preferito per i messaggi di commit:

git config --global core.editor "bbedit -w"

Una volta terminata la modifica, salva e chiudi il file e git lo utilizzerà per i commenti.


15

Supponendo che il tuo editor sia predefinito su vi / vim, puoi uscire dall'editor dei messaggi di commit digitando:

:x

che salverà e uscirà dal file del messaggio di commit. Quindi tornerai alla normale sezione del comando git.

Altri comandi vi:
http://www.lagmonster.org/docs/vi.html


9
Se sei come me, eri in modalità di inserimento / sostituzione (cioè digitando il messaggio di commit). In tal caso, dovrai escpremere per entrare in modalità comando prima di digitare :xper salvare e uscire.
Martin Carney

1
Supponendo ovviamente che il suo editor sia predefinito su vi / vim. Questo non sarebbe vero per tutti. Certamente non per questo utente di emacs;)
Haziz

Questo mi ha risparmiato molti problemi. Grazie mille
Danation

12

Come tutti hanno detto, questo è solo il punto in cui aggiungi il tuo commento di commit - ma per alcuni potrebbe essere ancora fonte di confusione specialmente se non hai configurato le impostazioni dell'editor e non sei a conoscenza di cosa sia VI : allora potresti essere uno shock , perché penserai di essere ancora nel GIT-Bash

In quel caso sei in effetti in un editor di testo con alcuni modi interessanti di gestire le cose e questo insieme di comandi può aiutarti in modo che tu possa superare il tuo primo commit e quindi configurare un editor con cui hai familiarità o usarlo come un'opportunità per imparare a usarlo.


8
So che finire in VI mi sciocca sempre :)
Will Robertson

1
Le cose hanno molto più senso adesso. +1
Matt Ellen

11

L' -mopzione per il commit ti consente di inserire un messaggio di commit sulla riga di comando:

git commit -m "my first commit"

7

Quando crei un nuovo commit, git avvia un editor di testo e vi scrive alcune cose.

Utilizzando questo editor di testo, l'intenzione è di scrivere il messaggio di commit che verrà associato al commit creato in modo feshly.

Dopo aver terminato, salva e esci dall'editor di testo. Git userà ciò che hai scritto come messaggio di commit.

Il messaggio di commit ha una struttura particolare, descritta come segue:

La prima riga del messaggio di commit viene utilizzata come intestazione (o titolo) del messaggio. La lunghezza preferita dell'intestazione del commit è inferiore a 40 caratteri, poiché questo è il numero di caratteri che github visualizza nella scheda Commits di un dato repository prima di troncarlo, cosa che alcune persone trovano irritante.

Quando si compone l'intestazione, l'uso di un verbo al presente in maiuscolo per la prima parola è pratica comune, sebbene non sia affatto richiesta.

Una nuova riga delinea l'intestazione e il corpo del messaggio.

Il corpo può consistere in quello che vuoi. Una panoramica delle modifiche introdotte dal tuo commit è ragionevole. Alcune applicazioni di terze parti utilizzano le informazioni incluso il corpo dei messaggi di commit per attivare vari tipi di hook (penso a Gerrit e Pivotal Tracker, per citarne due).

Ecco un breve e dolce esempio. Un inizio #denota un commento.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Qui un certo signor Torvalds opina su ciò che rende un buon impegno.

E qui Tpope fa lo stesso.

Come affermato in molte altre risposte, la modifica dell'editor predefinito è una riga singola sulla riga di comando.

Per la mia preferenza:

git config --global core.editor "vim"

2
questa dovrebbe essere la risposta accettata per la domanda.
mppfiles

6

Prova Esc e poi ZZ, dopo aver digitato il messaggio. Come altri hanno detto, quando esegui quel comando commit, in realtà esegue un editor di testo per inserire il messaggio. Nel mio caso (OS X) era VI, che ho scoperto dopo aver scavato un po '. In tal caso, premi Esc per entrare in modalità "comando" (al contrario della modalità INSERT) e inserisci ZZ. Sono sicuro che ci sono altri modi per portare a termine il compito, ma per me è stato così. Non avendo mai usato VI o emacs non mi è stato subito evidente e non è stato menzionato in nessuna delle guide per principianti che stavo usando. Si spera che questo aiuti.


4

Il git commitcomando aprirà l'editor specificato nella EDITORvariabile d'ambiente in modo da poter inserire un commento di commit. Su un sistema Linux o BSD, dovrebbe essere vi per impostazione predefinita, sebbene qualsiasi editor dovrebbe funzionare.

Basta inserire i tuoi commenti e salvare il file.


2

Ero confuso perché continuavo a provare a inserire un nome file dopo: w in VIM. Ciò non attiva il commit. Invece ho continuato a ricevere un messaggio "Interruzione del commit a causa di un messaggio di commit vuoto". Non inserire un nome file dopo: w. : w salva il file in .git / COMMIT_EDITMSG per impostazione predefinita. Quindi: q per uscire per completare il commit. Puoi vedere i risultati con git log.


oppure puoi semplicemente usare: x per salvare e uscire.
TJ Ellis

2

Ora che ho cambiato il mio editor in emacs, tutto funziona bene.

Ma prima di impostarlo, "git commit -a" ha aperto gedit, ma è terminato immediatamente con un "commit interrotto a causa di un messaggio di commit vuoto". Il salvataggio del file da gedit non ha avuto alcun effetto. L'impostazione esplicita dell'editor con "git config --global core.editor" gedit "" ha avuto lo stesso risultato.

Non c'è niente di sbagliato in emacs, ma per curiosità perché non funziona con gedit e c'è un modo per farlo funzionare?

Grazie.


se gedit è già in esecuzione, facendo "gedit file.txt" si aprirà il file nella finestra esistente e tornerà immediatamente ... dovresti pubblicare questa domanda come una vera domanda, in particolare sull'uso di gedit con git.
araqnid

6
si è imbattuto anche in questo. puoi risolverlo impostando gedit in modo che funzioni in modalità 'standalone':git config --global core.editor "gedit -s"
brittohalloran

2

Per quelli di voi che utilizzano OS XI ho trovato questo comando che funziona bene:
git config --global core.editor "open -t -W"

che costringerà git ad aprire l'editor di testo predefinito (textedit nel mio caso) e quindi ad attendere che esci dall'applicazione. Tieni presente che devi "Salva" e poi "Esci" textedit prima che il commit venga completato. Ci sono alcuni altri comandi con cui puoi giocare come descritto in dettaglio in questa pagina:

Libreria per sviluppatori Apple: comando di apertura

Puoi anche provare git config --global core.editor "open -e -W"se vuoi che git apra sempre textedit indipendentemente da quale sia l'editor predefinito.


1

Sì, assicurati di avere un set di editor ragionevole. Non sono sicuro di quale sarà l'editor predefinito ma se, come me, è nano (dirà da qualche parte vicino all'inizio dopo aver digitato commit) devi solo digitare un commento e quindi premere Ctrl-x per finire. Quindi premi y, seguito da invio per confermare il commit.

Inoltre, se vuoi vedere un semplice elenco dei file che invierai piuttosto che un enorme elenco di differenze, prova in anticipo

git diff --name-only

1

Quando esegui il controllo di revisione, dovresti sempre spiegare quali sono le modifiche apportate. Di solito la prima volta che ricevi un commento come "Initial Commit".

Tuttavia, a lungo termine, vuoi fare un buon commento per ogni commit. Avrai bisogno di qualcosa della forma:

Aggiunta funzionalità sperimentale x.

X aumenterà le prestazioni della funzione Y nella condizione Z. Se hai bisogno di X, attivala con gli interruttori -x o --feature-eks. Questo risponde alla richiesta di funzionalità # 1138.


1

Essendo anche nuovo su Terminal, "Escape and then ZZ" ha funzionato per me, ho avuto questo problema per mesi e inoltre non sono riuscito a trovare un modo per aggirarlo.

Grazie TheGeoff per il tuo semplice consiglio!


0

Quello che segue è probabilmente il modo più semplice per eseguire il commit di tutte le modifiche:

git commit -a -m "Type your commit message here..."

Ovviamente ci sono modi molto più dettagliati di impegnarsi, ma questo dovrebbe aiutarti a iniziare.

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.