İndiyədək ideal ssenarini nəzərdən keçirmişik: kod yazırsınız, commit-lər yaradırsınız, Pull Request açırsınız. Amma real işdə hər şey həmişə plana uyğun getmir: fayl əlavə etməyi unudursunuz, commit mesajında səhv yazırsınız və ya yanlış istiqamətə getdiyinizi anlayırsınız. Bu məqalədə ən çox rast gəlinən problemlərin IDE alətləri ilə necə həll edildiyinə baxacağıq.
Nümunələr və interfeys görüntüləri JetBrains IDE-lərinə aiddir; əməliyyatların adları və yeri sizin versiyanızda fərqli ola bilər. Məşqlər üçün ayrıca təlim repozitoriyasından istifadə edin. İş layihəsində isə onun budaqlar, dəyişikliklərin qeydə alınması və göndərilməsi ilə bağlı qaydalarına əməl edin.
Layihədə Claude Code işləyəndə saxlanmış tarixçə əvvəlki vəziyyəti bərpa etməyə kömək edir. Amma Git hər düymə basılışını yadda saxlamır: commit edilməmiş dəyişikliklər itə bilər. Ləğv etməzdən əvvəl budağı, seçilmiş faylları və lazım olan surətin olub-olmadığını yoxlayın.
Rollback - lokal dəyişikliklərin geri qaytarılması
Ssenari: faylı dəyişmisiniz, amma bütün düzəlişlərin səhv olduğunu anlayıb onu son commit-dəki vəziyyətə tez qaytarmaq istəyirsiniz.

Rollback funksiyasından istifadə edin:
- sol paneldəki
Committabını açın; - siyahıda geri qaytarmaq istədiyiniz dəyişdirilmiş faylı tapın (və ya bir neçəsini seçin);
- sağ düyməni klikləyib
Rollbackseçin (və ya dairəvi ox işarəsinə klikləyin).
IDE seçilmiş lokal dəyişikliklərin itə biləcəyi barədə xəbərdarlıq edəcək. Əvvəlcə diff-ə baxın və lazım olanı saxlayın. Rollback-i yalnız həqiqətən silmək istədiyiniz dəyişikliklər üçün təsdiqləyin, sonra nəticəni yoxlayın. Bu, commit edilməmiş işi silir, ehtiyat nüsxəsini yaratmır.
Rollback-dən əvvəl agentin dəyişikliklərini həmin fayldakı əvvəlki dəyişikliklərdən ayırın. Rollback seçilmiş faylları son commit-in (HEAD) vəziyyətinə qaytarır və həm hazırlanmış, həm də hazırlanmamış dəyişiklikləri silir. Bu, flagsız git restore ilə eyni deyil: o, məzmunu index-dən götürür və yalnız işçi faylları dəyişir.
Amend - son commit-ə əlavə etmək
Ssenari: indicə Commit düyməsini basmısınız və vacib faylı (məsələn, yenilənmiş testi) əlavə etməyi unutduğunuzu, yaxud mesajda səhv yazdığınızı dərhal anlamısınız. Commit hələ paylaşılmayıbsa, Amend-dən istifadə edə bilərsiniz. Ayrı düzəliş commit-i də uyğundur, xüsusən artıq ortaq tarixçə üçün.

Paylaşılmamış commit-i tamamlamaq üçün Amend (əlavə etmək və ya düzəltmək) funksiyasından istifadə edin:
Commitpəncərəsində unudulmuş fayla düzəlişlər edin və qarşısındakı xananı işarələyin;- Commit Message panelində Amend checkbox-ını tapın (və ya dişli işarəsi -> Amend Commit) və onu işarələyin;
- IDE əvvəlki commit-in mesajını avtomatik dolduracaq - onu redaktə edə bilərsiniz;
Commitdüyməsinə klikləyin.
Amend əvvəlki commit-in əvəzinə başqa identifikatorlu yeni commit yaradır. Köhnə obyekt yerində redaktə olunmur. Əvvəlki commit artıq göndərilibsə və başqaları ondan istifadə edirsə, adətən ayrıca düzəliş etmək daha yaxşıdır.
Bu funksiya haqqında ətraflı məlumat JetBrains-in rəsmi təlimatında var.
Undo Commit
Ssenari: commit yaratmısınız, amma onu hələ göndərməmisiniz, yəni Push etməmisiniz və tələsdiyinizi anlamısınız. Commit-in tarixçədən çıxmasını, dəyişikliklərin isə redaktorda qalmasını istəyirsiniz ki, işə davam edəsiniz.
Undo Commit funksiyasından istifadə edin:
- tarixçəni açın - aşağıdakı
Git -> Logtabına keçin; - ümumi qrafikin sadəcə ən yuxarı sətrini deyil, məhz cari budağın (HEAD) son commit-ini tapın və kontekst menyusunu açın;
Undo Commitseçin.

Dəyişikliklər siyahısını (adətən Default Changelist) seçib OK düyməsinə klikləyin. Commit tarixçədən silinəcək, fayllar isə dəyişdirilmiş statusu ilə Commit pəncərəsinə qayıdacaq. Heç nə itirməmisiniz, rahatlıqla kod yazmağa davam edə bilərsiniz.
Reset - budağın yerinin və faylların vəziyyətinin dəyişdirilməsi
Reset Current Branch to Here... funksiyası budaq göstəricisini seçdiyiniz istənilən commit-ə keçirən güclü alətdir. Vəziyyətdən asılı olaraq, son əməliyyatları ehtiyatla geri ala və ya işləməyən kodu kökündən silə bilər.
Ssenari A - son lokal commit-lərin ləğvi
Lokal olaraq (Push-dan əvvəl) bir neçə commit yaratmısınız və bu inkişaf xəttinin tamamilə yanlış olduğunu anlamısınız.
Git -> Logtabını açın;- qayıtmaq istədiyiniz son yaxşı commit-i tapın (səhv commit-lər silsiləsindən əvvəlki commit-i);
- ona sağ düymə ilə klikləyib
Reset Current Branch to Here...seçin.
Ssenari B - serverdəki vəziyyətə sıfırlama
İzlənən faylları uzaq budağa uyğun bərpa etmək istəyirsiniz. Əvvəlcə lazım olan lokal işi saxlayın və Fetch edin: origin/main etiketi serverin daim yenilənən vəziyyətini yox, son dəfə alınmış vəziyyətini göstərir. Hazırda konfliktli əməliyyat gedirsə, əvvəlcə onu həll edib tamamlayın və ya ləğv edin; Hard-ı hər şeyə çarə kimi işlətməyin.
Git -> Logpəncərəsini açın;- uzaq budağın markerini tapın - adətən bu, bənövşəyi
origin/mainetiketi olan commit-dir (və yaorigin/budaginizin_adi). Bu, serverdəki kodun son məlum vəziyyətidir; - bu commit-ə sağ düymə ilə klikləyib
Reset Current Branch to Here...seçin.

Sıfırlama rejimləri
Sıfırlama pəncərəsində rejimi düşünərək seçin. Hər üç variantda cari budaq seçilmiş commit-ə keçir, amma index-in və işçi faylların vəziyyəti fərqli olur:
- Soft işçi faylları və index-i saxlayır. Mixed işçi faylları saxlayır, amma index-i seçilmiş commit-ə uyğunlaşdırır: fərq hazırlanmayıb qalır. Hər ikisi faylların məzmunu ilə işləməyə davam etməyə imkan versə də, bunlar fərqli rejimlərdir;
- Hard index-i və izlənən faylları seçilmiş commit-ə uyğunlaşdıraraq onların commit edilməmiş dəyişikliklərini silir. Adi, əlaqəsiz untracked fayllar qala bilər, bərpaya mane olan yollar isə silinə bilər. Commit-lər bütün anbarlardan dərhal silinmir, amma işi sonradan xilas edəcəyinizə arxayın olmayın.
Push-dan sonra nə etməli
Ssenari: push etmisiniz və yalnız bundan sonra səhvi görmüsünüz.
Commit serverə çatan kimi layihənin ortaq tarixçəsinin bir hissəsinə çevrilir. Tarixçəni Reset və ya Amend ilə yenidən yazmaq həmkarlarınız üçün ciddi problemlər yarada bilər - təsəvvür edin ki, onlar dəyişikliklərinizi artıq endirib, onların əsasında işləməyə başlayıblar.
Düzgün və təhlükəsiz həll: səhvi düzəldən yeni commit yaradın və adi qaydada push edin. Bu, normal praktikadır. Səhv koddan sonra aydın düzəliş commit-i gələn xətti tarixçə layihənin inkişafını bütün komanda üçün şəffaf edir.
IDE-də Revert Commit adlı xüsusi funksiya da var. Git -> Log jurnalında səhv commit-ə sağ düymə ilə klikləyib Revert Commit seçsəniz, IDE səhv commit-in etdiyinin tam əksini həyata keçirən yeni "əks commit" yaradacaq (məsələn, əlavə edilmiş sətirləri siləcək).

Revert paylaşılmış dəyişikliyi yeni commit-lə ləğv etmək üçün faydalıdır. Həm koda, həm də mətnə tətbiq oluna bilər, amma sonrakı düzəlişlərlə konflikt yarada bilər. Konflikti həll etdikdən sonra nəticəni yoxlayın; mürəkkəb asılılıq varsa, ayrıca düzəliş etmək bəzən daha aydın olur.
Stash / Shelve - dəyişiklikləri müvəqqəti kənara qoymaq
Ssenari: yeni feature üzərində fəal işləyirsiniz, faylların hamısı qırmızı və mavidir. Birdən komanda rəhbəri gəlir: "hər şeyi burax, main budağındakı bug-ı təcili düzəltmək lazımdır". main-ə keçə bilmirsiniz, çünki tamamlanmamış, konflikt yaradan dəyişikliklər var. Layihə qaydaları buna icazə verirsə, aralıq lokal commit yaratmaq olar; amma işi indi commit etmək əlverişli deyilsə, sonraya saxlaya bilərsiniz.
Həll yolu işi müvəqqəti virtual qutuya qoymaqdır. Git-də buna Stash deyilir, IDE-də isə ayrıca Shelve mexanizmi var (işi rəfə qoymaq).
Commitpəncərəsini açıb dəyişdirilmiş faylları seçin;- Shelve Changes... seçin; bu addımlar Shelve üçündür, Git Stash ayrıca çağırılır;
- bu saxlanmış işə aydın ad verin və Shelve düyməsinə klikləyin.

Shelve-dən sonra qalan faylları yoxlayın: lazım olan bütün dəyişikliklər həqiqətən kənara qoyulubmu? İndi main-ə keçib səhvi düzəldə və nəticəni layihə qaydalarına uyğun saxlaya bilərsiniz. Sonra iş budağına qayıdın, Shelf-i açın və Unshelve seçin.
Git Stash üçün ayrıca stash siyahısından istifadə edin və lazım olan qeydi bərpa edin. Bu, başqa bir saxlanma yeridir. Adi stash əlavə parametr olmadan yeni untracked faylları daxil etmir; keçməzdən əvvəl lazım olan bütün işin saxlandığını yoxlayın. Bərpa konflikt yarada bilər, ona görə sonra faylları yenidən yoxlayın.
Jurnalla daha təkmil iş
Git -> Log pəncərəsi sadəcə commit siyahısı deyil, araşdırmalar üçün güclü alətdir.
- Commit hash-i - hərf və rəqəmlərdən ibarət sətirdir, məsələn
a1b2c3d. Kodunuzun hər snapshot-ının unikal identifikatorudur.![Jurnalda commit hash-i]()
- tarixçəni budaq, müəllif, tarix və ya commit mesajındakı sözə görə filtrləmək olar - beləliklə, müəyyən hissə üzərində kimin və nə vaxt işlədiyini tez taparsınız;
- konkret kod sətrinin əlavə edildiyi və ya silindiyi commit-i tapmaq üçün
Logpəncərəsində yalnız mesajlarda deyil, dəyişikliklərin məzmununda da axtarış var; - redaktorun sətir nömrələrinin olduğu sahəsinə sağ düymə ilə klikləyib
Annotate with Git Blameseçin - IDE hər sətrin qarşısında onu sonuncu dəfə kimin və hansı commit-də dəyişdirdiyini göstərəcək. Sonra commit-i və əlaqəli müzakirəni açın: Blame sətrin son dəyişikliyini göstərir, amma səbəbini izah etmir.
Riskli əməliyyat - Force Push
Göndərilmiş commit-ləri dəyişməyin yaxşı fikir olmadığını artıq bilirik. Bəs lokal tarixçənizi (məsələn, Undo Commit və ya Amend ilə) dəyişmisinizsə, amma serverdə köhnə versiya qalırsa? Adi push zamanı Git ortaq tarixçəni yenidən yazılmaqdan qorumaq üçün xəta verəcək.
Force push yeni tarixçə əvvəlkinin davamı olmasa belə, seçilmiş uzaq istinadı əvəz etməyə imkan verir. Bu, bütün serveri təmizləmir: nəticə göndərilən istinadlardan asılıdır. Budaq qoruması belə göndərişə mane ola bilər.
Force push uzaq budaqdan lokal tarixçənizdə olmayan commit-ləri silə bilər. Buna görə ortaq budağın tarixçəsini yenidən yazmaq üçün komandanın ayrıca razılaşdırılmış qərarı lazımdır. Adi düzəliş üçün yeni commit və ya Revert istifadə edin.
Force push-i müzakirə etmək üçün tipik hal - tarixçəsi razılaşdırılaraq yenidən yazılmış öz budağınızdır. Hətta bu halda da başqalarının yeni commit-lərinin olub-olmadığını yoxlayın. --force-with-lease variantı uzaq budağın gözlənilən vəziyyətini yoxlayır, amma hansı commit-lərin əvəzlənəcəyini anlamaq ehtiyacını aradan qaldırmır.
Şəkildə Force Push, Push düyməsinin açılan menyusundadır. İstifadə etməzdən əvvəl IDE versiyanızın hansı məcburi göndəriş rejimini tətbiq etdiyini yoxlayın.

Nə etdiyinizə 100% əmin deyilsinizsə, force push işlətməyin. Düzəlişlərlə yeni commit yaratmaq (və ya Revert istifadə etmək) daha təhlükəsizdir.
Bu qayda həm sizə, həm də Claude Code-a aiddir: ortaq tarixçəni yenidən yazmaq təhlükəlidir. Force push-i adi hal kimi qəbul etməyin və ortaq budaqlarda icrasına icazə verməyin. Claude serverdə tarixçəni yenidən yazacaq bir şey təklif edərsə, dayanın və təhlükəsiz alternativin (yeni commit, Revert) olub-olmadığını yoxlayın.
Layihənin yenilənməsi
Yeni işə başlamazdan əvvəl başlanğıc budağı və tamamlanmamış dəyişiklikləri yoxlayın. Lazım olanda yeniləmələri alın və birləşdirmə nəticəsini oxuyun. Update Project konflikt olmayacağına zəmanət vermir və tənzimləmələrdən asılı olaraq merge və ya rebase edə bilər.
Yeniləmədən sonra cari budağı, commit siyahısını və faylların vəziyyətini yoxlayın. Konflikt yaranıbsa, işə davam etməzdən əvvəl həll edin.
Git Log-un kontekst menyusu
Git -> Log tabını açıb istənilən commit-ə sağ düymə ilə klikləyəndə böyük kontekst menyusu görünür. Ən faydalı əmrlərə tapşırıqlar üzrə qruplaşdıraraq baxaq.

Qrup 1 - baxış və təhlil (təhlükəsiz əməliyyatlar)
Copy Revision Number- commit-in unikal hash-ini mübadilə buferinə köçürür. Həmkara commit keçidini göndərmək və ya tapşırıqda göstərmək (Jira, YouTrack) üçün əlverişlidir;Compare with Local- köhnə commit-dəki faylın vəziyyətini redaktordakı indiki versiya ilə müqayisə edir. Kodun bir ay əvvəl necə göründüyünü anlamaq üçün yaxşı üsuldur;Show Repository at Revision- layihənin bütün fayllarının bu commit anındakı strukturunu açır (cari budaq dəyişmir).
Qrup 2 - budaqlarla iş
New Branch...- keçmişdə seçilmiş commit-dən birbaşa yeni budaq yaradır. Çox irəli getdiyinizi, hər şeyi pozduğunuzu anlayıb son işlək nöqtədən yeni budaq başlamaq istəyəndə faydalıdır;Checkout Revision- lokal layihəni bu commit-ə keçirir. Detached HEAD vəziyyətinə düşəcəksiniz: köhnə kodu işə salmaq olar, amma yeni commit-lər heç bir budağa bağlanmayacaq. Detached HEAD-də lazım olan commit-ləri yaratmısınızsa, əvvəlcə onları yeni budaqda saxlayın. Qayıtmaq üçün adi budağı (məsələn,main) Checkout edin.
Qrup 3 - dəyişiklik və köçürmə
Cherry-Pick- başqa budaqdan konkret commit-i götürüb cari budağa köçürməyə imkan verir. Məsələn, başqa budaqda kimsə işinizə mane olan bug-ı düzəldib - başqasının bütün budağını birləşdirmədən həmin commit-i Cherry-Pick edirsiniz;Edit Commit Message...- commit hələ göndərilməyibsə (Push olmayıbsa), mesajını tez dəyişmək olar. Yalnız mətni dəyişmək lazımdırsa, Amend-dən daha rahatdır.
Qrup 4 - dəyişikliklərin ləğvi
Bu əmrləri yuxarıda ətraflı nəzərdən keçirdik:
Reset Current Branch to Here...- cari branch-i bu commit-ə keçirir (branch-dən görünən tarixçəni dəyişir);Revert Commit- dəyişdirilmiş məzmunu ləğv etmək üçün "əks commit", yəni yeni lokal commit yaradır; sonra onu serverə göndərirlər;Undo Commit...- lokal commit-i yenidən dəyişikliklər pəncərəsinə qaytarır.
Qrup 5 - tarixçənin yenidən yazılması
Menyuda Squash Commits... (bir neçə commit-i birləşdirmək), Drop Commits (tarixçənin ortasından commit-i silmək) və ya Interactively Rebase from Here... kimi əmrlər də var. Bunlar lokal tarixçə üzərində incə düzəlişlər üçün alətlərdir (Interactive Rebase).
Hələ alətlərə öyrəşənə qədər bu əmrlərdən istifadə etməməyə çalışın - onlar seçilmiş commit-ləri və budaq tarixçəsinin sonrakı hissəsini yenidən yaza bilər. Real komanda işində bu alətlərdən qaralama lokal budağı rəyə (Pull Request açmağa) göndərməzdən əvvəl səliqəyə salmaq üçün istifadə edirlər.
Git - sizin təhlükəsizlik torunuz
Bərpa üsulunu işin vəziyyətinə görə seçin: commit edilməmiş fayllar, lokal commit-lər və paylaşılmış tarixçə üçün fərqli əməliyyatlar lazımdır. Lazım olan versiyanı saxlamaq və əməliyyatdan əvvəl dəyişikliklərə baxmaq hər səhvi geri ala biləcəyinizə ümid etməkdən daha faydalıdır.
Claude Code ilə birlikdə necə işləyir
Layihədə Claude Code işləyəndə bu alətlər əsas müdafiənizdir. Onlardan belə istifadə edin:
- tez-tez commit yaradın: hər commit geri dönüş nöqtəsidir. Agent yanlış istiqamətə getsə, son işlək vəziyyətə qayıda bilərsiniz;
- commit edilməmiş dəyişiklikləri ləğv etmək üçün əvvəlcə lazımi dəyişiklikləri ayırın, sonra Rollback və ya git restore-da əhatə dairəsini və bərpa mənbəyini yoxlayın;
- commit yaradılıb, amma göndərilməyibsə,
Undo Commitdəyişiklikləri redaktora qaytaracaq; - səhv artıq serverdədirsə, tarixçəni yenidən yazmaqdansa, düzəlişli yeni commit və ya
Revertdaha təhlükəsizdir.
Məlumatları silən və ya tarixçəni yenidən yazan əməliyyatlara (Reset hard, force push) kor-koranə razı olmayın. Əvvəlcə Claude Code-un nə edəcəyinə baxın. Böyük işə başlamazdan əvvəl lazım olan vəziyyəti saxlayın və geri dönüş nöqtəsində həqiqətən işinizin olduğuna əmin olun.
Əvvəlki məqalə: Pull request: yaradılmasından birləşdirilməyədək · Növbəti məqalə: Repozitoriyanın yaradılması, rebase və məxfi məlumatlar

GO TO FULL VERSION