Git Commit: O clasă de master

Publicat: 2023-02-26
Laptop pe un fundal albastru care arată un prompt de comandă Linux.
fatmawati achmad zaenuri/Shutterstock.com
Comanda Git commit stochează copii ale modificărilor din directorul tău de lucru în depozitul tău Git. Dar poate fi folosit și pentru a modifica comiterile existente și, de asemenea, pentru a anula comiterile.

O cerință de bază a oricărui sistem de control al versiunilor este să stocați diferite versiuni de fișiere pentru dvs. În Git, comanda care face acest lucru este commit . Iată tot ce trebuie să știi.

Cuprins

Ce este un commit în Git?
Configurarea comenzii commit
Folosind comanda commit
Un angajament de bază
Fișiere de auto-stadionare
Înscenare și angajare în același timp
Angajarea într-o ramură diferită
Efectuarea modificărilor la Commit-uri
Eliminarea modificărilor dintr-un commit
Revenirea unui întreg commit
Cuțitul elvețian Git

Ce este un commit în Git?

Commit-urile sunt seria de instantanee realizate de-a lungul ciclului de viață al unui proiect care formează istoria dezvoltării acestuia. Commit-urile sunt cele care ne permit să extragem o versiune a proiectului așa cum a fost în diferite momente în trecut. De ce este asta important?

Sistemele de control al versiunilor (VCS) sunt cel mai frecvent utilizate cu codul sursă software și proiectele de dezvoltare. Dar ele pot fi folosite cu succes cu orice colecție de fișiere text, cum ar fi fișierele Markdown care conțin capitole ale unei cărți.

Este posibil să nu doriți ca fiecare fișier din directoarele dvs. de proiect să fie gestionat de VCS, așa că trebuie să puteți nominaliza fișierele pentru care doriți să fie controlate de versiune. Acest lucru le adaugă la vizualizarea de control al versiunii a proiectului. Vor fi monitorizați pentru modificări.

O altă modalitate de a realiza acest lucru este să utilizați o listă de ignorare. Aceasta îi spune lui Git ce fișiere, directoare sau tipuri de fișiere ar trebui să le ignore întotdeauna.

În timp, pe măsură ce noi fișiere sunt adăugate la proiect, unele vor necesita adăugarea la sistemul de control al versiunilor. În Git, acest lucru este gestionat de comanda add . De fapt, comanda add face un serviciu dublu, după cum vom vedea.

Pentru a menține un istoric al modificărilor care au fost făcute în proiect, veți cere periodic lui Git să stocheze un instantaneu al stării proiectului, folosind comanda commit . Aici reapare comanda add în fluxul nostru de lucru. Folosim comanda add pentru a-i spune lui Git care fișiere modificate dorim să le includem în instantaneu. Apoi folosim commit pentru a-i spune lui Git să creeze instantaneul.

Configurarea comenzii commit

Informațiile despre commit sunt stocate împreună cu acesta, astfel încât este întotdeauna posibil să știți cine a făcut commit-ul, când și ce conține commit-ul. Unele dintre aceste metadate sunt capturate la momentul comiterii, cum ar fi mesajul de comitere.

Metadatele referitoare la identitatea membrilor echipei de dezvoltare pot fi configurate de fiecare utilizator, pentru a preveni furnizarea în mod repetat a acelorași informații.

Pentru a vă seta numele la nivel global pentru toate depozitele de pe computer, utilizați această comandă.

 git config --global user.name „Dave McKay” 

Setarea numelui de utilizator Git global

Pentru a verifica numele dvs. a fost setat, utilizați această comandă.

 git config --global user.name 

Verificarea numelui de utilizator global Git

Dacă trebuie să utilizați un nume diferit pentru un anumit depozit, schimbați în directorul proiectului și utilizați aceeași comandă fără opțiunea --global .

 git config user.name „McKay, David”
 git config user.name 

Setarea unui nume de utilizator Git specific depozitului

Acum avem un alt nume de utilizator implicit pentru acest depozit, iar numele nostru global este încă folosit pentru alte depozite.

Într-un mod similar, putem seta o adresă de e-mail fie global, fie pentru un singur depozit, incluzând sau omițând opțiunea --global .

 git config user.email „[email protected]
 git config --global user.email "[email protected]"
 git config user.email
 git config --global user.email 

Setarea adreselor de e-mail implicite ale utilizatorilor Git globale și specifice depozitului

Aceste setări sunt păstrate în fișierele de configurare. Setările globale Git sunt păstrate în „~/.gitconfig”, iar setările specifice depozitului sunt păstrate în fișierul „.git/config” al depozitului.

Comanda commit face referire și utilizează aceste valori în timp ce funcționează.

Folosind comanda commit

Utilizarea de bază a comenzii commit este de a prelua fișierele care se află în zona de staging, cunoscută sub numele de index, și de a le stoca ca commit în ramura curentă a depozitului.

Un angajament de bază

Avem un proiect cu un fișier modificat. Vom folosi comanda add pentru a pune în scenă fișierul, apoi îl vom confirma. Folosim opțiunea -m (mesaj de confirmare) pentru a putea oferi o scurtă descriere a scopului modificărilor. Dacă nu folosim această opțiune, ni se solicită un mesaj de commit pe măsură ce are loc commit-ul. Este mai convenabil să adăugați unul pe linia de comandă.

 git add jibber.c
 git commit -m „Text de ajutor actualizat” 

Organizarea și comiterea unui singur fișier

Dacă folosim comanda git log putem revizui detaliile comitărilor, în ordine cronologică, cu cea mai recentă comitere în fruntea listei.

 git log 

Verificarea jurnalului depozitului Git

Comiterile sunt afișate în less .

Cel mai recent comit din partea de sus a jurnalului Git

Commit-ul a fost etichetat cu numele și adresa de e-mail pe care le-am furnizat mai devreme, iar mesajul nostru de comit este și el înregistrat.

Fișiere de auto-stadionare

Montarea multor fișiere poate dura puțin timp. O abordare diferită este utilizarea opțiunii -A (toate) cu add .

Acest lucru pune în scenă automat toate fișierele modificate împreună cu toate fișierele care nu sunt urmărite în prezent. Stagingul fișierelor neurmărite respectă setările din fișierul tău „.gitignore”. Git nu va pune în scenă fișierele pe care i-ați spus că nu doriți să fie incluse. În cele din urmă, fișierele din index care nu mai sunt în directorul de lucru sunt eliminate din index.

În mod evident, opțiunea -A poate provoca multe să se întâmple dintr-o dată. Opțiunea --dry-run vă oferă o previzualizare a modificărilor fără a le efectua efectiv.

 git add -A --dry-run 

Folosind --dry-run pentru a previzualiza fișierele care vor fi montate și nemontate

În exemplul nostru, va pune în scenă două fișiere existente modificate și două fișiere noi. Să mergem mai departe și să folosim opțiunea -A înainte de a folosi comanda commit .

 git add -A
 git commit -m „Analizare îmbunătățită” 

Comitarea fișierelor modificate și nou create, după utilizarea opțiunii de adăugare -A

Putem vedea că în total patru fișiere sunt modificate. Două dintre ele sunt fișierele nou create, care sunt listate.

Înscenare și angajare în același timp

Comanda commit are o opțiune -a (toate) minuscule. Aceasta realizează punerea în scenă și comiterea fișierelor într-un singur pas.

Opțiunea commit -a pune în fază și comite fișierele existente modificate și elimină fișierele din index dacă acestea au fost eliminate din directorul de lucru. Nu pune în scenă automat fișierele neurmărite.

Ca și comanda add , comanda commit are o opțiune --dry-run care vă permite să previzualizați acțiunile sale înainte de a o executa.

 git commit -a --dry-run 

Folosind opțiunea commit -a pentru a previzualiza modificările fără a le efectua

Acum să executăm comanda.

 git commit -a --dry-run 

Folosind opțiunea commit -a pentru a pune în scenă și comite într-un singur pas

Dosarele sunt puse în scenă și comise pentru noi.

Angajarea într-o ramură diferită

Dacă ați făcut unele modificări la fișierele din directorul de lucru, atunci vă dați seama că nu ați verificat ramura corectă, trebuie să faceți modificările în ramura corectă fără a afecta ramura curentă.

Git nu are o comandă pentru comiterea unei alte ramuri. Dar puteți remedia această situație cu puțină dexteritate Git.

Vom folosi comanda Git stash pentru a face o copie a modificărilor. Apoi vom verifica ramura corectă și vom aplica modificările din depozit. Pentru a aplica modificările ascunse, folosim comanda pop mai degrabă decât comanda apply . Comanda pop aplică modificările și, de asemenea, le elimină din depozit.

Am făcut câteva modificări în ramura new-parser a depozitului nostru. Ar fi trebuit făcute în ramura classic-parser .

 git stash
 git checkout clasic-parser
 git stash pop 

Ascunderea modificărilor, verificarea unei sucursale și aplicarea modificărilor din depozit

Acum putem efectua un commit și putem actualiza această ramură.

 git commit -a -m „Adăugate funcții de pre-parser” 

Realizarea modificărilor care au fost preluate din depozit

Dacă revenim la ramura new-parser putem vedea că este actualizată, ceea ce înseamnă că modificările au fost eliminate din directorul de lucru, iar depozitul și fișierele sunt sincronizate.

 git checkout new-parser
 starea git 

Verificarea stării unei sucursale pentru a vă asigura că este actualizată

RELATE: Cum să actualizați și să mențineți ramuri Git separate

Efectuarea modificărilor la Commit-uri

Dacă trebuie să vă îmbunătățiți mesajul de comitere — poate ați observat o greșeală de scriere în el — sau ați uitat să puneți în scenă un fișier care ar fi trebuit să fie inclus în comit, puteți utiliza opțiunea --amend pentru a corecta lucrurile. Avertismentul este că acest lucru nu ar trebui să fie folosit pentru comiterile care au fost trimise într-un depozit de la distanță.

În ultimul nostru mesaj de confirmare, „fraze” ar fi trebuit să fie „frază”. Dacă folosim git log putem vedea asta.

Jurnalul Git cu un tip evidențiat

Pentru a corecta acest lucru, vom folosi opțiunea --amend astfel.

 git commit --amend -m „Identificare optimizată a frazei” 

Utilizarea opțiunii commit --amend pentru a corecta un mesaj de commit

Dacă mai folosim git log , putem vedea că vechiul commit a fost înlocuit cu unul nou cu mesajul de commit corectat.

Jurnalul Git care arată mesajul de confirmare corectat

Dacă vrem să adăugăm un fișier pe care am uitat să-l punem în scenă, putem comita acel fișier, astfel încât să apară ca parte a comiterii anterioare.

Vom folosi add pentru a pune în scenă fișierul, apoi vom face o comitare cu opțiunea --amend . Opțiunea --no-edit înseamnă că nu trebuie să furnizăm un nou mesaj de confirmare. Mesajul de comitere anterior este reținut.

 git add jibber.c
 git commit --amend --no-edit 

Trimiterea unui fișier la comiterea anterioară

Eliminarea modificărilor dintr-un commit

Dacă ați pus în scenă și ați comis din greșeală un fișier pe care nu ați intenționat să îl faceți, puteți elimina acel fișier din commit folosind comanda reset . Vom reseta confirmarea înapoi în zona de pregătire sau index. Apoi vom elimina fișierul și vom re-commite restul fișierelor.

Pentru a reseta ultimul comit în zona de staging, folosim comanda reset --soft . HEAD~ este prescurtarea pentru „comiterea din spatele HEAD al cronologiei de comitere a proiectului” sau, în engleză, „ultimul comitere”.

 git reset --soft HEAD~ 

Trimiterea ultimului commit înapoi în zona de pregătire

Pentru a elimina fișierul care nu ar fi trebuit inclus, folosim comanda reset --mixed . Acest lucru resetează acele modificări în directorul de lucru, recreând fișierul modificat ca un fișier neetajat, necommit.

 git reset --mixed jibber.c 

Eliminarea unui fișier din zona de pregătire Git

Trebuie să comitem celelalte fișiere rămase în index.

 git commit -m „Ajustări experimentale” 

Comitarea fișierelor care rămân în zona de staging

Celelalte două fișiere care au fost în comiterea inițială sunt re-comite pentru noi.

LEGATE: Cum să remediați, să editați sau să anulați comiterile Git (modificarea istoricului Git)

Revenirea unui întreg commit

Uneori, anularea unui întreg commit este cel mai ușor lucru de făcut. Îți pune directorul de lucru și depozitul înapoi la starea în care se aflau înainte de a le fi angajat.

Trebuie să folosim ID-ul de referință hashing al comiterii. Putem găsi asta folosind git log :

Jurnalul Git cu un identificator de comitere evidențiat

Copiați acea referință și utilizați-o în comanda revert :

 git rever e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

Revenirea unui commit identificat prin ID-ul său de comitere

Aceasta va deschide editorul dvs. implicit, astfel încât să puteți edita un mesaj de revenire. Există un mesaj implicit introdus pentru dvs. Puteți fie să îl utilizați, fie să îl editați după bunul plac.

Editarea mesajului de revenire, cu mesajul implicit evidențiat

Când sunteți mulțumit de mesajul de revenire, salvați fișierul și ieșiți din editor. În nano, faci asta cu „Ctrl+O” și „Ctrl+X”.

Acțiunea de revenire finalizată, anulând un întreg commit

Folosind încă o dată git log , putem vedea că a fost adăugat un nou commit care anulează modificările commit-ului revenit.

Cuțitul elvețian Git

Evident, commit este una dintre cele mai importante comenzi Git. Poate face multe, așa că sunt multe de învățat. Înțelegerea funcțiilor sale mai puțin utilizate este timp bine petrecut. Când trebuie să corectați o greșeală — chiar acum — veți fi bucuros că v-ați pregătit din timp.

LEGATE: Cum să utilizați îmbinarea Git