Git Commit: Master Class


Zhrnutie: Príkaz odovzdania Git ukladá kópie zmien z vášho pracovného adresára do vášho archívu Git. Môže sa však použiť aj na úpravu existujúcich potvrdení a tiež na vrátenie potvrdení.

Základnou požiadavkou každého systému na správu verzií je ukladať pre vás rôzne verzie súborov. V Gite to robí príkaz commit. Tu je všetko, čo potrebujete vedieť.

Čo je to záväzok v Git?

Záväzky sú sériou snímok vytvorených počas životného cyklu projektu, ktoré tvoria jeho históriu vývoja. Záväzky sú to, čo nám umožňuje extrahovať verziu projektu, ako tomu bolo v rôznych bodoch v minulosti. Prečo je to dôležité?

Systémy správy verzií (VCS) sa najčastejšie používajú so zdrojovým kódom softvéru a vývojovými projektmi. Možno ich však úspešne použiť s akoukoľvek kolekciou textových súborov, ako sú súbory Markdown obsahujúce kapitoly knihy.

Možno nebudete chcieť, aby každý súbor vo vašich projektových adresároch spracoval VCS, takže musíte byť schopní nominovať súbory, ktoré chcete mať pod kontrolou verzie. Toto ich pridá do zobrazenia riadenia verzií projektu. Zmeny budú sledované.

Ďalším spôsobom, ako to dosiahnuť, je použiť zoznam ignorovaných. Toto povie Gitu, ktoré súbory, adresáre alebo typy súborov má vždy ignorovať.

Postupom času, keď sa do projektu pridávajú nové súbory, bude potrebné pridať niektoré do systému správy verzií. V Gite to rieši príkaz add. Ako uvidíme, príkaz add v skutočnosti vykonáva dvojitú službu.

Aby ste zachovali históriu zmien, ktoré boli v projekte vykonané, budete pravidelne žiadať Git, aby uložil snímku stavu projektu pomocou príkazu commit. Tu sa v našom pracovnom postupe znova objaví príkaz add. Príkaz add používame na to, aby sme Gitu povedali, ktoré zmenené súbory chceme zahrnúť do snímky. Potom pomocou commit povieme Gitu, aby vytvoril snímku.

Konfigurácia príkazu commit

Informácie o odovzdaní sa ukladajú spolu s ním, takže je vždy možné vedieť, kto, kedy a čo odovzdanie obsahuje. Niektoré z týchto metadát sú zachytené v čase odovzdania, ako napríklad správa odovzdania.

Metadáta týkajúce sa identity členov vývojového tímu si môže nakonfigurovať každý používateľ, aby sa zabránilo opakovanému poskytovaniu rovnakých informácií.

Ak chcete globálne nastaviť svoje meno pre všetky úložiská vo vašom počítači, použite tento príkaz.

git config --global user.name "Dave McKay"

Ak chcete overiť, že vaše meno bolo nastavené, použite tento príkaz.

git config --global user.name

Ak potrebujete na konkrétnom úložisku použiť iný názov, prejdite do adresára projektu a použite rovnaký príkaz bez možnosti --global.

git config user.name "McKay, David"
git config user.name

Teraz máme pre toto úložisko iné predvolené používateľské meno a náš globálny názov sa stále používa pre iné úložiská.

Podobným spôsobom môžeme nastaviť e-mailovú adresu buď globálne alebo pre jeden repozitár zahrnutím alebo vynechaním možnosti --global.

git config user.email "dave@phony-domain.com"
git config --global user.email "dave@fake-domain.com"
git config user.email
git config --global user.email

Tieto nastavenia sú uložené v konfiguračných súboroch. Globálne nastavenia Git sú uložené v „~/.gitconfig“ a nastavenia špecifické pre úložisko sú uložené v súbore „.git/config“ úložiska.

Príkaz commit odkazuje a používa tieto hodnoty pri svojej činnosti.

Použitie príkazu commit

Základným použitím príkazu commit je zobrať súbory, ktoré sa nachádzajú v prípravnej oblasti, známej ako index, a uložiť ich ako potvrdenie v aktuálnej vetve úložiska.

Základný záväzok

Máme projekt so zmeneným súborom. Na vytvorenie súboru použijeme príkaz add a potom ho potvrdíme. Používame možnosť -m (potvrdenie správy), aby sme mohli poskytnúť krátky popis účelu zmien. Ak túto možnosť nepoužijeme, počas odovzdania sa nám zobrazí výzva na zadanie správy o odovzdaní. Je pohodlnejšie pridať ho do príkazového riadku.

git add jibber.c
git commit -m "Updated help text"

Ak použijeme príkaz git log, môžeme skontrolovať podrobnosti odovzdania v chronologickom poradí, pričom najnovšie odovzdanie je na začiatku zoznamu.

git log

Potvrdenia sú zobrazené v menej.

Potvrdenie bolo označené menom a e-mailovou adresou, ktorú sme uviedli predtým, a zaznamená sa aj naša správa o odovzdaní.

Automatické vytváranie súborov

Usporiadanie mnohých súborov môže chvíľu trvať. Iný prístup je použiť možnosť -A (all) s add.

Týmto sa automaticky rozložia všetky upravené súbory spolu so všetkými nesledovanými súbormi. Usporiadanie nesledovaných súborov rešpektuje nastavenia vo vašom súbore „.gitignore“. Git nevytvorí súbory, o ktorých ste mu povedali, že ich nechcete zahrnúť. Nakoniec sa z indexu odstránia súbory v indexe, ktoré už nie sú v pracovnom adresári.

Jednoducho povedané, možnosť -A môže spôsobiť, že sa toho stane veľa naraz. Možnosť --dry-run vám poskytuje náhľad zmien bez toho, aby ste ich skutočne vykonali.

git add -A --dry-run

V našom príklade vytvorí dva upravené existujúce súbory a dva nové súbory. Pokračujme a pred použitím príkazu commit použite možnosť -A.

git add -A
git commit -m "Enhanced parsing"

Vidíme, že sa zmenili celkovo štyri súbory. Dva z nich sú novovytvorené súbory, ktoré sú uvedené.

Inscenácia a odovzdanie v rovnakom čase

Príkaz commit má možnosť -a (všetky) malými písmenami. Tým sa vykoná príprava a odovzdanie súborov v jednom kroku.

Voľba commit -a vytvorí a potvrdí upravené existujúce súbory a odstráni súbory z indexu, ak boli odstránené z vášho pracovného adresára. neuskutočňuje automaticky nesledované súbory.

Podobne ako príkaz add, aj príkaz commit má možnosť --dry-run, ktorá vám umožňuje zobraziť ukážku jeho akcií pred jeho vykonaním.

git commit -a --dry-run

Teraz vykonáme príkaz.

git commit -a --dry-run

Súbory sú pre nás pripravené a odovzdané.

Zaviazanie sa inej pobočke

Ak ste vykonali nejaké zmeny v súboroch vo svojom pracovnom adresári, potom si uvedomíte, že ste si nevybrali správnu vetvu, musíte svoje zmeny uložiť do správnej vetvy bez toho, aby to ovplyvnilo aktuálnu vetvu.

Git nemá príkaz na odovzdanie sa inej vetve. Túto situáciu však môžete napraviť s trochou šikovnosti Git.

Na vytvorenie kópie zmien použijeme príkaz Git stash. Potom skontrolujeme správnu vetvu a použijeme zmeny zo skrýše. Na použitie skrytých zmien používame namiesto príkazu apply príkaz pop. Príkaz pop aplikuje zmeny a tiež ich odstráni zo skrýše.

Vo vetve new-parser nášho úložiska sme urobili niekoľko zmien. Mali by byť vytvorené vo vetve classic-parser.

git stash
git checkout classic-parser
git stash pop

Teraz môžeme vykonať potvrdenie a aktualizovať túto vetvu.

git commit -a -m "Added pre-parser functions"

Ak sa vrátime do vetvy new-parser, vidíme, že je aktuálna, čo znamená, že zmeny boli odstránené z vášho pracovného adresára a váš archív a súbory sú synchronizované.

git checkout new-parser
git status

Vykonávanie zmien v záväzkoch

Ak potrebujete vylepšiť správu odovzdania – možno ste v nej našli preklep – alebo ste zabudli pripraviť súbor, ktorý mal byť súčasťou odovzdania, môžete použiť možnosť --amend dať veci do poriadku. Upozornenie je, že by sa to nemalo používať pri potvrdeniach, ktoré boli odoslané do vzdialeného úložiska.

V našom poslednom potvrdení by „fraze“ malo byť „frázou“. Ak použijeme git log, môžeme to vidieť.

Aby sme to napravili, použijeme možnosť --amend, ako je táto.

git commit --amend -m "Optimized phrase identification"

Ak použijeme git log ešte raz, môžeme vidieť, že staré odovzdanie bolo nahradené novým s opravenou správou odovzdania.

Ak chceme pridať súbor, ktorý sme zabudli vytvoriť, môžeme tento súbor odovzdať tak, aby sa objavil ako súčasť predchádzajúceho odovzdania.

Na vytvorenie súboru použijeme add a potom vykonáme potvrdenie s možnosťou --amend. Možnosť --no-edit znamená, že nemusíme poskytovať novú správu odovzdania. Predchádzajúca správa o odovzdaní sa zachová.

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

Odstránenie zmien zo záväzku

Ak ste neúmyselne zinscenovali a odovzdali súbor, ktorý ste nemali v úmysle, môžete tento súbor z odovzdania odstrániť pomocou príkazu reset. Resetujeme odovzdanie späť do pracovnej oblasti alebo indexu. Potom súbor odstránime a zvyšok súborov znova odošleme.

Na resetovanie posledného odovzdania do prípravnej oblasti použijeme príkaz reset --soft. HEAD~ je skratka pre „potvrdenie za HEAD časovou osou odovzdania projektu“ alebo v angličtine „posledné odovzdanie“.

git reset --soft HEAD~

Na odstránenie súboru, ktorý nemal byť zahrnutý, použijeme príkaz reset --mixed. Tým sa tieto zmeny resetujú späť do pracovného adresára a upravený súbor sa znova vytvorí ako súbor, ktorý nie je naprogramovaný.

git reset --mixed jibber.c

Potrebujeme odovzdať ostatné súbory, ktoré zostali v indexe.

git commit -m "Experimental tweaks"

Ďalšie dva súbory, ktoré boli v pôvodnom potvrdení, sú pre nás opätovne potvrdené.

Vrátenie celého záväzku

Niekedy je najjednoduchšie zrušenie celého odovzdania. Vráti váš pracovný adresár a úložisko späť do stavu, v akom boli predtým, ako ste sa zaviazali.

Musíme použiť hashované referenčné ID odovzdania. Môžeme to nájsť pomocou git log:

Skopírujte tento odkaz a použite ho v príkaze revert:

git revert e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8

Tým sa otvorí váš predvolený editor, aby ste mohli upraviť vrátenú správu. Je zadaná predvolená správa. Môžete ho použiť alebo upraviť podľa svojich predstáv.

Keď ste so správou o vrátení spokojní, uložte súbor a ukončite editor. V nano to urobíte pomocou „Ctrl+O“ a „Ctrl+X“.

Ak použijeme git log ešte raz, môžeme vidieť, že bolo pridané nové odovzdanie, ktoré zruší zmeny vráteného odovzdania.

Švajčiarsky armádny nôž Git

Je zrejmé, že commit je jedným z najdôležitejších príkazov Git. Dokáže veľa, takže je čo učiť. Zoznámenie sa s jeho menej používanými funkciami je dobre strávený čas. Keď potrebujete opraviť chybu – práve teraz – budete radi, že ste sa na ňu vopred pripravili.