Perché 'git commit' non salva le mie modifiche?


251

Ho fatto git commit -m "message"così:

> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Ma dopo, quando lo faccio git statusmostra gli stessi file modificati:

> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Che cosa sto facendo di sbagliato?


16
Utilizzare git commit -am "save arezzo files"per aggiungere automaticamente tutte le modifiche (wrt .gitignore). Potresti voler aggiungere solo file / directory specifici:git add file.src
mbx

Risposte:


400

Come dice il messaggio:

nessuna modifica aggiunta al commit (usa "git add" e / o "git commit -a")

Git ha una "area di gestione temporanea" in cui è necessario aggiungere i file prima di eseguire il commit, puoi leggere una spiegazione qui .


Per il tuo esempio specifico, puoi usare:

git commit -am "save arezzo files"

(nota il extra atra le bandiere, può anche essere scritto come git commit -a -m "message"- entrambi fanno la stessa cosa)

In alternativa, se si desidera essere più selettivi su ciò che si aggiunge al commit, utilizzare il comando git add per aggiungere i file appropriati all'area di gestione temporanea e lo stato git per visualizzare in anteprima ciò che sta per essere aggiunto (ricordando di prestare attenzione a la formulazione utilizzata).

Puoi anche trovare documentazione generale ed esercitazioni su come usare git nella pagina della documentazione di git che fornirà maggiori dettagli sul concetto di gestione temporanea / aggiunta di file.


Un'altra cosa che vale la pena conoscere è la gestione temporanea interattiva : ciò consente di aggiungere parti di un file all'area di gestione temporanea, quindi se sono state apportate tre distinte modifiche al codice (per funzionalità correlate ma diverse), è possibile utilizzare la modalità interattiva per dividere il cambia e aggiunge / impegna ogni parte a turno. Avere commit specifici più piccoli come questo può essere utile.


@PeterBoughton intendevi "aggiunta interattiva" anziché "aggiunta interattiva"?
DJ

3
No, intendevo aggiungere interattivo.
Peter Boughton,

2
Il repository locale è una specie di area di staging prima di inviare il codice al repository remoto. Perché aggiungere un altro "livello" prima di eseguire le modifiche, non è un po 'troppo complicato? Sono nuovo di Git ma immagino che il 99,99% degli sviluppatori usi sempre commit -am perché le modifiche non vanno comunque al di fuori del loro ambiente locale.
PawelRoman

2
Penso di essermi imbattuto in questo perché sono abituato al mio IDE a occuparmene. Non capisco perché si tratta di un passo necessario sia, ma poi di nuovo, c'è molto su git Non capisco ... io git media ...
trpt4him

49

Non hai aggiunto le modifiche. In alternativa, aggiungili tramite

git add filename1 filename2

o aggiungi tutte le modifiche (dal percorso principale del progetto)

git add .

o usa la scorciatoia -amentre commetti:

git commit -a -m "message".

Inoltre, esorto fortemente gli utenti a utilizzare l'aggiunta interattiva. Soprattutto quando stai provando a fare piccoli commit che sono facilmente reversibili.
Jer

40

Dovresti fare:

git commit . -m "save arezzo files"

4
Questa sembra essere la risposta corretta alla domanda del PO. Non voleva "aggiungere", voleva impegnare ciò che era stato modificato.
VectorVortec,

8

Ho copiato un piccolo progetto secondario che avevo sotto il controllo del codice sorgente Git in un altro progetto e ho dimenticato di eliminare la cartella .git. Quando sono andato a impegnarmi ho ricevuto lo stesso messaggio sopra e non sono riuscito a cancellarlo fino a quando non ho eliminato la .gitcartella.

È un po 'sciocco, ma vale la pena controllare che non ci sia una cartella .git nella cartella che non commette.


7

Avresti potuto fare un:

git add -u -n

Per verificare quali file sono stati modificati e verranno aggiunti (esecuzione a secco: opzione -n), quindi

git add -u

Per aggiungere solo file modificati


4

Trovo che questo problema compaia quando ho fatto una git add .sottodirectory in basso dove .gitignorevive il mio file (la directory home del mio repository, per così dire). Prova a cambiare directory nella directory più in alto ed esegui git add .seguito da git commit -m "my commit message".


4

Forse una cosa ovvia, ma ...

Se hai problemi con l'indice, usa git-gui . Si ottiene un'ottima vista sul funzionamento effettivo dell'indice (area di gestione temporanea).

Un'altra fonte di informazioni che mi ha aiutato a capire l'indice è stata Scott Chacons "Getting Git", pagina 259 e successive.

Ho iniziato usando la riga di comando perché la maggior parte della documentazione mostrava solo che ...

Penso che git-gui e gitk in realtà mi facciano lavorare più velocemente e mi sono sbarazzato di cattive abitudini come "git pull" per esempio ... Ora prendo sempre prima ... Vedi quali sono i nuovi cambiamenti prima di unirmi.


3

Il motivo per cui ciò sta accadendo è perché hai una cartella che è già tracciata da Git all'interno di un'altra cartella che è anche tracciata da Git. Ad esempio, avevo un progetto e vi ho aggiunto una sottocartella. Entrambi sono stati seguiti da Git prima che io inserissi uno dentro l'altro. Per interrompere il tracciamento di quello all'interno, trovalo e rimuovi il file Git con:

rm -rf .git

Nel mio caso avevo un'applicazione WordPress e la cartella che avevo aggiunto all'interno era un tema. Quindi ho dovuto andare alla radice del tema e rimuovere il file Git, in modo che l'intero progetto fosse ora monitorato dal genitore, l'applicazione WordPress.


1

se hai più file nel mio caso, ho 7000 file di immagine quando provo ad aggiungerli dalla cartella del percorso del progetto non li ha aggiunti ma quando vado nella cartella dell'immagine tutto è ok. Passa attraverso la cartella di destinazione e ordina come abows

git add .
git commit -am "image uploading"
git push origin master

git push origin master Enumerazione di oggetti: 6574, terminato. Conteggio degli oggetti: 100% (6574/6574), fatto. Compressione delta usando fino a 4 thread Comprimere oggetti: 100% (6347/6347), fatto. Scrittura di oggetti: 28% (1850/6569), 142,17 MiB | 414,00 KiB / s


0

Ho avuto un problema in cui stavo facendo commit --amendanche dopo aver emesso un git add .e ancora non funzionava. Ho scoperto che ho fatto alcune .vimrcpersonalizzazioni e il mio editor non funzionava correttamente. La correzione di questi errori in modo che vimrestituisse il codice corretto ha risolto il problema.


0

Ho avuto un problema molto simile con lo stesso messaggio di errore. "Modifiche non messe in scena per il commit", ma quando faccio una diff mostra differenze. Alla fine ho capito che un po 'di tempo fa avevo cambiato un caso di directory. ex. "PostgeSQL" a "postgresql". Come ricordo ora a volte git lascerà un file o due nella vecchia cartella del caso. Quindi assegnerai una nuova versione al nuovo caso.

Quindi git non sa su quale affidarsi. Quindi, per risolverlo, ho dovuto andare sul sito Web di Github. Quindi sei in grado di visualizzare entrambi i casi. E devi eliminare tutti i file nella directory incapsulata errata. Assicurati di avere la versione corretta salvata nella directory corretta.

Dopo aver eliminato tutti i file nella vecchia directory del case, l'intera directory scomparirà. Quindi fai un commit.

A questo punto dovresti essere in grado di fare un Pull sul tuo computer locale e non vedere più i conflitti. Poter così impegnarmi di nuovo. :)


0

se hai una sottocartella, che è stata clonata da un altro repository git, devi prima rimuovere il file $ .git $ dal repository secondario: rm -rf .git dopodiché puoi passare alla cartella principale e usare git add -A.

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.