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
2.0
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:

  1. 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".
  2. 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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow