Kommit etmək — bu, Git versiyaya nəzarət sistemində dəyişikliklərin qeydə alınması aksiyasıdır və layihə tarixində saxlama nöqtəsi yaradır. Hər bir kommit hash, müəllif, tarix və dəyişikliklərin təsvirini əhatə edir. GitHub Octoverse 2024 məlumatlarına görə, dünyada hər gün 50 milyondan çox kommit yaradılır. Commit — versiyalaşdırma ilə işin əsas vahidi olub, müasir proqram təminatının inkişafını təsəvvür etmək mümkün deyil.
Başlıca məqamlar
Git-də kommit — bu, layihə fayllarının vəziyyətini müəyyən bir zamanda saxlayan obyektdir. Hər bir kommit bütün izlənən faylların snapshotını, valideyn kommitinə istinadı və metadata məlumatlarını ehtiva edir. Digər versiyaya nəzarət sistemlərindən fərqli olaraq, Git content-addressable storage istifadə edir — hər bir obyekt məzmununun SHA-1 heşi ilə müəyyənləşdirilir.
Proqramçı dəyişiklikləri kommit etdikdə, Git commit obyekti yaradır: tree obyekti (fayl strukturu), valideyn kommit heşi, müəllif, kommitter, tarix və mesaj. Bu obyekt dəyişməzdir — kommit yaradıldıqdan sonra onun heşini dəyişmədən modifikasiya etmək mümkün deyil. Məhz dəyişməzlik layihə tarixinin bütövlüyünə zəmanət verir.
# Dəyişiklikləri hazırla və kommit et
git add index.html style.css
git commit -m "Fix responsive layout on mobile devices"
# Kommit təfərrüatlarına bax
git log --oneline -3
git show HEAD
# Bütün dəyişiklikləri hazırla və bir addımda kommit et
git commit -a -m "Update dependencies to latest versions"
Kommitlər istiqamətləndirilmiş asiklik qraf (DAG) təşkil edir, burada hər yeni kommit əvvəlkinə istinad edir. Bu, tarix boyu hərəkət etməyə, dəyişiklikləri ləğv etməyə və kod bazasının təkamülünü təhlil etməyə imkan verir. Git DAG strukturunu başa düşmək — kommitlərlə qabaqcıl işin əsasıdır.
Git-də kommit prosesi iki mərhələdən ibarətdir: dəyişikliklərin staging area (indeks) əlavə edilməsi və kommitin yaradılması. Staging area proqramçıya işçi kataloqunda çoxlu fayl dəyişdirilsə belə, kommitə hansı dəyişikliklərin daxil olacağını seçməyə imkan verir.
Atomarlıq qaydası — yaxşı kommitin açar prinsipidir. Hər bir kommit bir məntiqi dəyişiklik ehtiva etməlidir. Proqramçı səhvi düzəldir və kodu refaktor edirsə — bunlar iki fərqli kommitdir. Atomar kommitlər kod-review-i, dəyişikliklərin geri qaytarılmasını və tarixin təhlilini asanlaşdırır.
Kommit etməzdən əvvəl yoxlamağa dəyər: kodda debug çıxışı, şərh edilmiş bloklar və ya təsadüfi dəyişikliklər qalıbmı. Bunun üçün git diff --cached əmri istifadə olunur, hansı ki, kommitə nəyin daxil olacağını göstərir. git status vasitəsilə əlavə yoxlama staging area-dakı faylların siyahısını göstərir.
Kommit mesajı — gələcək proqramçılar üçün dəyişiklik sənədləşdirməsidir. Yaxşı mesaj suallara cavab verir: nə dəyişdirildi və niyə. Conventional Commits konvensiyası (Angular team, 2016) bir çox layihə üçün standart halına gəlib və formatı müəyyənləşdirir: tip(sahə): təsvir.
| Tip | Təyinat | Nümunə |
|---|---|---|
| feat | yeni funksionallıq | feat(api): add user registration endpoint |
| fix | səhvin düzəldilməsi | fix(auth): resolve token refresh issue |
| refactor | davranışı dəyişmədən refaktoring | refactor(core): extract payment validator |
| docs | sənədləşdirmə | docs(readme): update installation guide |
| test | testlərin əlavə edilməsi | test(cart): add unit tests for checkout |
Yaxşı kommit mesajı başlıqdan (50 simvola qədər) və gövdədən (isteğə bağlı, sətir başına 72 simvola qədər) ibarətdir. Başlıq əmr şəklində yazılır: “Add” yox, “Added” və ya “Adds”. Capitalization və başlıq sonunda nöqtə qoyulmur — bu beynəlxalq Git razılaşmasıdır.
Pis mesaj: “fix things” və ya “update” — məlumat daşımır. Bir aydan sonra proqramçı nəyin dəyişdirildiyini və niyə olduğunu başa düşməyəcək. Yaxşı mesaj: “fix(payment): handle timeout in stripe callback” — dərhal harada və nəyin düzəldildiyi aydındır.
Proqramçılar, xüsusən yeni başlayanlar, kommitlərdə tez-tez tipik səhvlərə yol verirlər. Ən geniş yayılmışı — çox böyük kommit, içərisində onlarla dəyişiklik qarışdırılıb. Belə kommiti qismən geri qaytarmaq mümkün deyil, kod-review isə əzaba çevrilir.
Tezliyə görə ikinci səhv — pis kommit mesajı. “fix”, “update”, “changes” və ya “wip” tipli mesajlar gələcək proqramçılara kontekst vermir. Altı aydan sonra heç kim nəyin dəqiq düzəldildiyini xatırlamayacaq. Qayda sadədir: təsəvvür edin ki, bir ildən sonra tarixə baxırsınız və konkret dəyişikliyi tapmağa çalışırsınız.
Üçüncü səhv — kompilyasiya olunmayan və ya işləməyən kodun kommiti. Kommitdən sonra kod ən azından kompilyasiya olunmalıdır. Qırılmayan build — ümumi budağa edilən hər kommit üçün əsas tələbdir. Bunun üçün kommitdən əvvəl qurma və testlər işə salınır.
Dördüncü səhv — məxfi məlumatların kommiti. API açarları, şifrələr və tokenlər Git tarixçəsinə düşməməlidir. Sirr artıq kommit edilibsə, onu sadəcə yeni kommitdə silmək kifayət deyil — bütün tarixçədən git filter-branch və ya BFG Repo-Cleaner vasitəsilə silmək lazımdır.
Git kommit tarixçəsini idarə etmək üçün alətlər təqdim edir. Ən faydalılarından biri git commit --amend — son kommiti yeni dəyişikliklərlə tamamlamağa və ya mesajı düzəltməyə imkan verir. Proqramçı fayl əlavə etməyi unudubsa və ya mesajda səhv edibsə, bu rahatdır.
# Son kommit mesajını düzəlt
git commit --amend -m "fix(auth): correct token validation logic"
# Əskik faylı son kommitə əlavə et
git add missed-file.txt
git commit --amend --no-edit
# Son 3 kommit üçün interaktiv rebase
git rebase -i HEAD~3
Interactive rebase — tarixçəni yenidən yazmaq üçün güclü alətdir. Kommitləri birləşdirməyə (squash), mesajları dəyişməyə (reword), sıranı dəyişməyə (reorder) və kommitləri silməyə (drop) imkan verir. Lakin rebase tarixçəni dəyişir, buna görə yalnız uzaq repozitoriya göndərilməmiş lokal kommitlərə tətbiq edilir.
Kommitlərin ləğvi üçün iki yanaşma var. git revert əvvəlki kommitin dəyişikliklərini ləğv edən yeni kommit yaradır — tarixçəni qoruyan təhlükəsiz üsul. git reset kommitləri tarixçədən silir — kommitlər artıq göndərilibsə təhlükəlidir. Komanda işində nəşr olunmuş kommitləri ləğv etmək üçün yalnız git revert istifadə olunur.
Tez-tez verilən suallar
Kommit etmək — Git-də dəyişikliklərin saxlama nöqtəsini yaratmaq deməkdir. Kommit nəyin və niyə dəyişdirildiyinin təsviri ilə layihə tarixində faylların cari vəziyyətini qeyd edir. Hər bir kommitin unikal identifikatoru (SHA-1 heşi) var və dəyişikliklərin ayrılmaz zəncirinin bir hissəsidir.
Məntiqi tamamlanmış hər dəyişiklikdən sonra, hətta kiçik olsa belə, kommit etmək tövsiyə olunur. Optimal tezlik — bir tapşırıq və ya düzəliş üçün 1 kommit. Hər 5 dəqiqədən bir kommit etməyə dəyməz, lakin dəyişiklikləri bir neçə gün bir kommit etmədən yığmaq da olmaz.
Atomar kommit bir məntiqi dəyişiklik ehtiva edir — bir tapşırıq, bir səhv düzəlişi və ya bir yeni funksionallıq. Müxtəlif dəyişiklikləri bir kommitdə qarışdırmır. Atomar kommitlərin üstünlükləri: geri qaytarmanın sadəliyi, aydın tarixçə və asan kod-review.
Nəşr olunmuş kommiti ləğv etmək üçün git revert
Bəli, uzaq repozitoriyaya göndərməzdən əvvəl. Son kommiti dəyişmək üçün git commit --amend və ya bir neçə kommiti dəyişmək üçün git rebase -i istifadə edin. Push-dan sonra tarixçəni dəyişmək tövsiyə olunmur — bu, artıq dəyişikliklərini göndərmiş digər proqramçılarda problemlərə səbəb ola bilər.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun