Rebase — Git-də commit ardıcıllığını yeni baza commitinə köçürən, budaq tarixini yenidən yazan əməliyyatdır. Merge-dən fərqli olaraq, Rebase birləşmə commiti yaratmır, commitləri hədəf budağın cari vəziyyəti üzərinə təkrar tətbiq edir. git-scm.com, 2026 məlumatına görə, rebase Git layihələrinin 58%-də təmiz xətti commit tarixçəsi saxlamaq üçün istifadə olunur.
Əsas məqamlar
Rebase (bazanın dəyişdirilməsi) — cari budaqdan commitləri yeni istinad nöqtəsinə (bazaya) köçürən Git əməliyyatıdır. Merge commiti yaratmaq əvəzinə, rebase hər bir commiti mənbə budaqdan götürərək növbə ilə yeni baza üzərinə tətbiq edir. Nəticədə budaqlanmalar olmadan xətti commit ardıcıllığı əldə edilir.
Rebase adı „re-base" — bazanı dəyişmək mənasından gəlir. Əgər merge iki budağı bir nöqtədə birləşdirirsə, rebase sanki bütün budağınızı yeni bir yerə köçürür, işə hədəf budağın cari vəziyyətindən başladığınız illüziyasını yaradır. Bu, ideallaşdırılmış ardıcıl iş təəssüratı yaradır.
Atlassian, 2025 məlumatına görə, feature budaqları üçün rebase istifadə edən komandalar commit tarixçəsini təhlil etməyə yalnız merge istifadə edən komandalarla müqayisədə 30% daha az vaxt sərf edirlər. Xətti tarixçə git blame, bisect və git log --oneline vasitəsilə jurnalın baxışını sadələşdirir.
Merge iki valideynli commit yaradaraq budaqları birləşdirir. Rebase tarixçəni yenidən yazır: yeni commitlər orijinal dəyişikliklərlə eyni olsa da, yeni hash-lərlə təzədən yaradılır. Bu o deməkdir ki, rebase commit-lərin SHA identifikatorlarını dəyişir ki, bu da ictimai budaqlar üçün kritikdir.
Rebase mexanizmi dörd addımdan ibarətdir: Git cari və hədəf budağın ortaq əcdadını (merge base) müəyyən edir, sonra cari budağın hər bir commitini ardıcıl olaraq hədəf budaq üzərinə tətbiq edir. Əgər hansısa addımda konflikt yaranarsa — rebase dayanır və həllini gözləyir.
# Başlanğıc vəziyyəti: feature develop-dan 3 commit geridədir
git checkout feature/new-login
git rebase develop
# Git feature-dan 3 commit götürür ve onları develop üzərinə tətbiq edir
# Konflikt yoxdursa — rebase avtomatik tamamlanır
# Varsa — Git konfliktli commitdə dayanır
Rebase-dən sonra feature budağı develop-dan bütün commitləri və öz commitlərini ehtiva edir, bunlar develop-in davamı kimi görünür. Bu, merge commiti yaratmadan develop-ə fast-forward vasitəsilə birləşdirməyə imkan verir.
Ətraflı nümunəyə baxaq: proqramçı develop-dan feature budağı yaratdı, iki commit etdi, bu müddətdə digər proqramçılar develop-a üç commit əlavə etdilər. Rebase feature-ın iki commitini yeni yerə köçürərək yeni SHA-larla surətlərini yaradır.
# 1. Feature budağı yaratmaq
git checkout -b feature/payment-refactor develop
# 2. Feature-da commitlər etmək
git commit -m "refactor: extract payment validation"
git commit -m "refactor: add payment gateway interface"
# 3. Develop-ı yeniləmək (həmkarların işi)
git checkout develop
git pull
# 4. Feature-ı yeni develop üzərinə rebase etmək
git checkout feature/payment-refactor
git rebase develop
# 5. İndi feature fast-forward vasitəsilə birləşdirilə bilər
git checkout develop
git merge feature/payment-refactor
4-cü addımda konflikt yaranarsa, Git problemli commitdə dayanır. Proqramçı konflikti həll edir, git add edir və git rebase --continue icra edir. Commiti atlamaq lazımdırsa — git rebase --skip, bütün rebase-i ləğv etmək üçün — git rebase --abort.
--empty flagı boş commitlərdə rebase davranışını idarə edir — commit-in bütün dəyişikliklərinin artıq hədəf budaqda mövcud olduğu vəziyyətlər. Susmaya görə rebase dayanır və qərar tələb edir. --empty=drop flagı ilə Git belə commitləri dayanmadan avtomatik atlayır, bu da çox sayda commit ilə kütləvi bazanın dəyişdirilməsini sürətləndirir.
Interactive rebase (git rebase -i) — commit tarixçəsini redaktə etmək üçün güclü vasitədir. O, commit siyahısı və əsas əmrlərlə redaktor açır: pick (saxla), reword (mesajı dəyiş), edit (məzmunu dəyiş), squash (əvvəlki ilə birləşdir), fixup (mesaj olmadan birləşdir), drop (sil).
# Son 4 commit-in interaktiv rebase-i
git rebase -i HEAD~4
# Redaktorda rebase planı açılacaq:
# pick a1b2c3 feat: add login screen
# pick d4e5f6 fix: login validation
# pick g7h8i9 fix: login layout
# pick j0k1l2 docs: add login comments
# Dəyişdiririk:
# pick a1b2c3 feat: add login screen
# squash d4e5f6 fix: login validation
# squash g7h8i9 fix: login layout
# drop j0k1l2 docs: add login comments
Nəticə: üç commit (giriş ekranı, validasiya, tərtibat) birinə sıxışdırıldı, şərhləri olan commit silindi. Bu, kod baxışına qaralama və düzəlişlər olmadan təmiz tarixçə təqdim etməyə imkan verir. Interactive rebase — Pull Request-dən əvvəl feature budağının hazırlanması üçün standart vasitədir.
Rebase və Merge eyni tapşırığı — dəyişikliklərin inteqrasiyasını — həll edir, lakin prinsipial olaraq fərqli üsullarla. Onlar arasında seçim git log-da hansı tarixçəni görmək istədiyinizdən və budağınızla kimin işlədiyindən asılıdır.
| Meyar | Merge | Rebase |
|---|---|---|
| Tarixçə | Budaqlanmanı saxlayır | Xətti, budaqlanmasız |
| Birləşmə commiti | Yaradılır (ff xaric) | Yaradılmır |
| SHA commitləri | Dəyişmir | Yeniləri yaradılır |
| Təhlükəsizlik | İctimai budaqlar üçün təhlükəsiz | Təhlükəli — tarixçəni yenidən yazır |
| Jurnalın oxunaqlılığı | Budaqlanma qrafiki | Düz xətt |
| git bisect | Rahat — merge nöqtəsi görünür | Rahat — xətti ardıcıllıq |
Praktik qayda: ortaq budaqlara (develop, main) inteqrasiya üçün merge, şəxsi feature budaqlarını aktual vəziyyətə gətirmək üçün rebase istifadə edin. Bir çox komandalar birləşdirir: feature-ı develop-a rebase, sonra develop-a --no-ff merge.
Git bisect — reqressiyaya səbəb olan commiti tapmaq üçün vasitədir. Merge istifadə edərkən git bisect hər iki valideyni nəzərə alaraq birləşmə commitlərindən düzgün keçir. Rebase-də bisect daha sürətli işləyir, çünki tarixçə xəttidir və budaqlanma tələb etmir. Lakin rebase commitlər komandaya məlum olduqdan sonra edilibsə, orijinal SHA itirilir və bisect problemli commiti tapa bilməz.
Rebase üç ssenaridə optimaldır: feature budağının Pull Request-ə hazırlanması, şəxsi budağın main/develop-ın cari vəziyyətinə yenilənməsi və birləşmədən əvvəl tarixçənin təmizlənməsi. Hər bir halda rebase komanda işi üçün risk olmadan tarixçənin oxunaqlılığını yaxşılaşdırır.
Pull Request qarşısında iş commitlərini (WIP, rəydən sonra düzəlişlər) mənalı məntiqi vahidlərə birləşdirmək üçün interactive rebase icra etmək tövsiyə olunur. Bu kod nəzərdən keçirməsini asanlaşdırır: rəyçi 15 xırda commit deyil, anlaşılan mesajlarla 3-5 strukturlaşdırılmış dəyişiklik görür.
Feature budağının yenilənməsi üçün rebase merge-dən üstündür, çünki o, lazımsız birləşmə commitləri yaratmır. Feature budağında vaxtaşırı git rebase develop etsəniz, son birləşmədən sonra 10 birləşmə commiti kaskadı olmayacaq — yalnız develop üzərində təmiz funksiya commitləri.
Tarixçənin təmizlənməsi birləşmədən əvvəl interactive rebase vasitəsilə kiçik düzəlişləri (səhv hərflər, formatlaşdırma) gizlətməyə və commitləri funksionallığa görə qruplaşdırmağa imkan verir. Git mesajları Conventional Commits (fix:, feat:, refactor:, docs:) razılaşmasına uyğun olmalıdır ki, bu da avtomatik changelog yaradır.
Rebase — səhv tətbiq edildikdə təhlükəli əməliyyatdır. Əsas risk — dərc edilmiş tarixçənin yenidən yazılması. Əgər proqramçı başqalarının artıq push etdiyi və istifadə etdiyi budağı rebase edərsə, onların yerli surətləri sinxronizasiyanı itirər və məlumat itkisi riski ilə force-pull etməli olarlar.
Riskleri minimuma endirmək üçün qaydaya əməl edin: rebase yalnız dərc edilməmiş şəxsi budaqlar üçün. Budaq artıq ortaq repozitoridədirsə — --no-ff ilə merge istifadə edin. Dərc edilmiş budağın rebase-i zəruridirsə — komandanı xəbərdar edin və force push-u əvvəlcədən razılaşdırın.
Təhlükəli rebase-dən avtomatik qorunma server-side hooks vasitəsilə həyata keçirilir: Git server tərəfində pre-receive hook push-un dərc edilmiş commitləri yenidən yazıb-yazmadığını yoxlaya bilər. GitHub və GitLab qorunan budaqlar üçün daxili qoruma təmin edir — administrator tərəfindən qoruma ləğv edilməyibsə, force push bloklanır.
Tez-tez verilən suallar
Budağın tarixçəsi dəyişəcək — commit-lərin SHA-ları fərqli olacaq. Artıq bu budağı push edən və ya ondan törəmə budaqlar yaradan hər kəs git pull zamanı konfliktlərlə qarşılaşacaq. Bərpa əl müdaxiləsi tələb edəcək və commit itkisinə səbəb ola bilər.
Tamamlanmadan əvvəl — git rebase --abort. Tamamlandıqdan sonra — yalnız git reflog vasitəsilə, əgər rebase yaxınlarda edilibsə. reflog HEAD hərəkətlərinin tarixçəsini saxlayır, onun vasitəsilə rebase-dən əvvəlki vəziyyətə qayıtmaq olar: git reset --hard HEAD@{1}.
Rebase commit ardıcıllığını yeni bazaya köçürür. Cherry-pick bir və ya bir neçə konkret commiti cari budaqda tətbiq edir. Rebase bütün zəncir üçün avtomatikdir, cherry-pick — hər commitin əl ilə seçilməsidir.
Tövsiyə olunur, lakin məcburi deyil. PR-dən əvvəl rebase budağı main/develop-ın cari vəziyyətinə yeniləyir və tarixçəni təmizləyir. Budaq yaxınlarda yaradılıbsa və yenilənmə tələb etmirsə — commitləri təmizləmək üçün interactive rebase kifayətdir.
Teqlər rebase zamanı köçürülmür. Əgər rebase edilmiş commitdə teq idisə, bu teq indi budaq tarixçəsinə daxil olmayan köhnə commitdə qalacaq. Feature budaqlarında commitləri teqləməmək, yalnız main-də teqləmək tövsiyə olunur.
Nəticə
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