Git
messa in scena
Ricerca…
Osservazioni
Vale la pena notare che la messa in scena ha poco a che fare con i 'file' stessi e tutto ciò che riguarda le modifiche all'interno di ciascun file. Mettiamo in scena file contenenti modifiche e git tiene traccia delle modifiche come commit (anche quando le modifiche in un commit vengono eseguite su più file).
La distinzione tra file e commit può sembrare minore, ma capire questa differenza è fondamentale per comprendere le funzioni essenziali come cherry-pick e diff. (Vedi la frustrazione nei commenti riguardo alla complessità di una risposta accettata che propone cherry-pick come strumento di gestione dei file .)
Qual è un buon posto per spiegare i concetti? È nelle osservazioni?
Concetti chiave:
Un file è la metafora più comune dei due nella tecnologia dell'informazione. La best practice impone che un nome file non cambi con il cambiamento dei suoi contenuti (con alcune eccezioni riconosciute).
Un commit è una metafora che è unica per la gestione del codice sorgente. I commit sono modifiche relative a uno sforzo specifico, come una correzione di bug. I commit spesso coinvolgono diversi file. Una singola, piccola correzione di bug può comportare modifiche a template e css in file univoci. Poiché la modifica è descritta, sviluppata, documentata, esaminata e distribuita, le modifiche attraverso i file separati possono essere annotate e gestite come una singola unità. La singola unità in questo caso è il commit. Altrettanto importante, concentrarsi solo sul commit durante una revisione consente di ignorare in modo sicuro le linee di codice invariate nei vari file interessati.
Staging Un singolo file
Per mettere in scena un file per il commit, eseguire
git add <filename>
Gestione di tutte le modifiche ai file
git add -A
git add .
Nella versione 2.x, git add .
metterà in scena tutte le modifiche ai file nella directory corrente e in tutte le sue sottodirectory. Tuttavia, in 1.x, mette in scena solo i file nuovi e modificati, non i file eliminati .
Usa git add -A
, o il suo comando equivalente git add --all
, per mettere in scena tutte le modifiche ai file in qualsiasi versione di git.
Stage eliminato file
git rm filename
Per eliminare il file da git senza rimuoverlo dal disco, usa il flag --cached
git rm --cached filename
Non rilasciare un file che contiene modifiche
git reset <filePath>
Aggiungere interattivo
git add -i
(o --interactive
) ti darà un'interfaccia interattiva dove puoi modificare l'indice, per preparare ciò che vuoi avere nel prossimo commit. È possibile aggiungere e rimuovere le modifiche a interi file, aggiungere file non tracciati e rimuovere i file da tracciare, ma anche selezionare sottosezioni di modifiche da inserire nell'indice, selezionando blocchi di modifiche da aggiungere, suddividendo i blocchi o persino modificando il diff . Molti strumenti di commit grafici per Git (come ad esempio git gui
) includono tale funzionalità; questo potrebbe essere più facile da usare rispetto alla versione da riga di comando.
È molto utile (1) se hai impigliato i cambiamenti nella directory di lavoro che vuoi mettere in commit separati, e non tutti in un singolo commit (2) se sei nel mezzo di un rebase interattivo e vuoi dividerlo anche tu grande impegno.
$ git add -i
staged unstaged path
1: unchanged +4/-4 index.js
2: +1/-0 nothing package.json
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
La metà superiore di questo output mostra lo stato corrente dell'indice suddiviso in colonne staged e nonstaged:
-
index.js
ha aggiunto 4 righe e 4 righe rimosse. Al momento non è messo in scena, poiché lo stato corrente riporta "invariato". Quando questo file viene messo in scena, il+4/-4
bit verrà trasferito alla colonna di stage e la colonna non modificata leggerà "nothing". -
package.json
ha avuto una riga aggiunta ed è stata messa in scena. Non ci sono ulteriori cambiamenti dal momento che è stato messo in scena come indicato dalla riga "niente" sotto la colonna non cancellata.
La metà inferiore mostra cosa puoi fare. Immettere un numero (1-8) o una lettera ( s
, u
, r
, a
, p
, d
, q
, h
).
status
mostra un'uscita identica alla parte superiore dell'output sopra.
update
consente di apportare ulteriori modifiche ai commit staged con sintassi aggiuntiva.
revert
ripristina le informazioni di commit staged su HEAD.
add untracked
ti permette di aggiungere percorsi di file precedentemente non tracciati dal controllo di versione.
patch
consente di selezionare un percorso da un'uscita simile allo status
per ulteriori analisi.
diff
mostra ciò che sarà impegnato.
quit
esce dal comando.
help
presenta ulteriore aiuto sull'utilizzo di questo comando.
Aggiungi modifiche da hunk
Puoi vedere quali "pezzi" di lavoro verrebbero messi in scena per il commit usando il flag di patch:
git add -p
o
git add --patch
Questo apre un prompt interattivo che ti permette di guardare le differenze e di decidere se vuoi includerle o meno.
Stage this hunk [y,n,q,a,d,/,s,e,?]?
- y stage questo hunk per il prossimo commit
- n non mettere in scena questo pezzo per il prossimo commit
- q esci; non mettere in scena questo pezzo o uno qualsiasi dei pezzi restanti
- uno stage questo pezzo e tutti gli hunk successivi nel file
- d non mettere in scena questo hunk o uno dei pezzi successivi nel file
- g seleziona un pezzo per andare a
- / cerca un hunk che corrisponda alla regex data
- j lasciare questo pezzo indeciso, vedi pezzo successivo indecisi
- J lasciare questo pezzo indeciso, vedi il prossimo pezzo
- k lasciare questo pezzo incerto, vedi precedente fusto indecisi
- K lascia questo pezzo indeciso, guarda il pezzo precedente
- s divide il pezzo attuale in pezzi più piccoli
- e modifica manualmente il pezzo corrente
- ? stampare aiuto per i fusti
Ciò semplifica l'acquisizione delle modifiche che non si desidera eseguire.
Puoi anche aprirlo tramite git add --interactive
e selezionando p
.
Mostra modifiche a fasi
Per visualizzare gli hunk che sono messi in scena per il commit:
git diff --cached