Merge — bu nədir, birləşdirmə növləri və işləmə mexanizmi

Müəllif: IT Sectr Dərc olunub: 2026-05-10 Oxuma vaxtı: 10 dəq

Merge — Git-də bir budaqdan digərinə dəyişiklikləri birləşdirən, birləşmə commiti (merge commit) yaradan əməliyyatdır. Git bir neçə strategiyanı dəstəkləyir: fast-forward (xətti tarix), three-way merge (merge commit yaradılması ilə) və squash merge (bütün commitlərin birinə sıxışdırılması). git-scm.com, 2025 məlumatlarına görə, merge komanda şəraitində Git-in ən çox istifadə olunan kod inteqrasiya mexanizmi olaraq qalır.

Əsas məqamlar

  • Merge — Git-də birləşmə commiti ilə və ya olmadan budaqların birləşdirilməsi əməliyyatı
  • Fast-forward merge — ayrılma olmadıqda əlavə commit olmadan xətti birləşdirmə
  • Three-way merge — budaqlar ayrıldıqda merge commit yaradır
  • Squash merge — birləşdirmədən əvvəl bütün budaq commitlərini birinə sıxışdırır
  • Konfliktlər hər iki budaqda eyni sətirlər dəyişdirildikdə yaranır

Merge nədir?

Merge (birləşdirmə) — Git-də bir budaqdan (source) digərinə (target) dəyişiklikləri birləşdirən fundamental əməliyyatdır. Birləşdirmə nəticəsində hədəf budaq mənbə budaqdan olan bütün commitləri alır. Vəziyyətdən asılı olaraq Git merge-i üç fərqli şəkildə yerinə yetirə bilər.

Merge-in əsas dəyəri tarixin qorunmasıdır: merge commit budaqların birləşmə faktını qeyd edir, nə vaxt və hansı budaqların birləşdirildiyi barədə məlumatı saxlayır. Bu, dəyişikliklərin auditi, reqressiyaların axtarışı və inkişaf xronologiyasının anlaşılmasını asanlaşdırır. Böyük layihələrdə merge commit kod inteqrasiyasının standart üsuludur.

GitLab Flow məlumatlarına görə, merge commitlər Git ilə işləyən komandaların 73%-də istifadə olunur. Alternativ yanaşmaları (rebase, squash) xətti tarixə yönəlmiş komandalar üstünlük verir. Strategiya seçimi komanda ölçüsündən, buraxılış tezliyindən və layihədə qəbul edilmiş razılaşmalardan asılıdır.

Merge nə vaxt lazımdır

Merge tələb olunur ki, proqramçı funksiya üzərində işi bitirib onu develop və ya main-ə inteqrasiya etmək istəyir. Tipik ssenari: proqramçı develop-dan funksiya budağı yaratdı, bir neçə gün işlədi, bu müddətdə develop-da digər iştirakçılar tərəfindən yeni commitlər peyda oldu. Birləşdirmədən əvvəl dəyişiklikləri birləşdirmək lazımdır — və bunun üçün merge istifadə olunur.

Merge olmadan Git-də bir kod üzərində birgə işləmək mümkün deyil. Hər dəfə iki proqramçı eyni kod bazasına eyni vaxtda dəyişikliklər daxil etdikdə, onların budaqları ayrılır. Merge — bu dəyişiklikləri məlumat itkisi olmadan geri birləşdirməyin yeganə yoludur.

Git-də birləşdirmə növləri

Git üç növ merge dəstəkləyir, hər biri öz ssenarisi üçün nəzərdə tutulub. Birləşdirmə növünün seçimi commit tarixinə, geri qaytarma rahatlığına və log-un oxunaqlılığına təsir edir.

Fast-forward merge

Fast-forward o zaman baş verir ki, hədəf budaq mənbə budaq yaradıldıqdan sonra yeni commitlərə malik olmasın. Bu halda Git sadəcə hədəf budaqın göstəricisini irəli, mənbə budaqın son commitinə aparır. Tarix merge commit olmadan xətti qalır.

bash
# Fast-forward merge: develop feature yaradıldığı andan dəyişməyib
git checkout develop
git merge feature/new-login

# Nəticə: develop göstəricisi feature-un sonuna keçdi
# Heç bir merge commit yaradılmadı

Fast-forward qısaömürlü budaqlar üçün əlverişlidir, burada proqramçı tək işləyirdi. Lakin bu yanaşmanın çatışmazlığı var: budağın mövcud olduğu barədə məlumat itir — bütün commitlər birbaşa develop-də edilmiş kimi görünür.

Three-way merge

Three-way merge hər iki budaq ayrılma nöqtəsindən sonra yeni commitlərə malik olduqda yerinə yetirilir. Git iki valideyni olan ayrıca merge commit yaradır ki, budaqların birləşmə faktını qeyd edir. Bu yanaşma komanda işində funksiya budaqları üçün tövsiyə olunur.

bash
# --no-ff bayrağı ilə məcburi three-way merge
git checkout develop
git merge --no-ff feature/new-login

# Varsayılan mesajla merge commit yaradıldı
# -m vasitəsilə öz mesajınızı təyin edə bilərsiniz
git merge --no-ff feature/new-login -m "Merge feature/new-login into develop"

--no-ff bayrağı fast-forward mümkün olsa belə, merge commit yaradılmasını təmin edir. Bu, layihədə budaqlanma haqqında məlumatı qorumaq üçün ən yaxşı təcrübədir.

Squash merge

Squash merge mənbə budağın bütün commitlərini birinə sıxışdırır və hədəf budağa tətbiq edir. Funksiya tarixi itir — budağa bütün dəyişikliklərlə bir commit daxil olur. Bu, funksiya budağındakı detallı commitlər ümumi tarix üçün dəyər daşımadıqda əlverişlidir.

bash
# Squash merge: feature-un bütün commitləri birinə sıxışdırıldı
git checkout develop
git merge --squash feature/experimental
git commit -m "feat: experimental login flow (squashed)"

Squash qaralama, eksperimental budaqlar və tarixin təmizliyini qorumağın vacib olduğu hallar üçün uyğundur. Minus — orijinal commitlərlə əlaqə itir, bu da ayrı-ayrı dəyişikliklərin geri qaytarılmasını çətinləşdirir.

Ours və Theirs strategiyaları

Ours və Theirs — Git-də iki xüsusi merge strategiyası. Ours mənbə budaqdan dəyişiklikləri tamamilə nəzərə almır, yalnız hədəf budaqda olanları saxlayır. Theirs isə əksinə, hər hansı konfliktdə mənbə budağın versiyasını qəbul edir. Bu strategiyalar hansı versiyanın qalib gəlməli olduğu əvvəlcədən məlum olduqda böyük həcmdə kodun birləşdirilməsində faydalıdır.

Merge necə işləyir

Git-də merge mexanizmi üç nöqtənin müqayisəsinə əsaslanır: ümumi əcdad (merge base), mənbə budağın vəziyyəti və hədəf budağın vəziyyəti. Git merge base-i — hər iki budaq üçün ümumi olan son commiti tapır və ayrılmadan sonra hər budaqda hansı dəyişikliklərin baş verdiyini hesablayır.

  • Addım 1 — Git merge base-i müəyyən edir: hər iki budaqda olan son commit
  • Addım 2 — Git iki diff qurur: merge base-dən source-a və merge base-dən target-ə
  • Addım 3 — Git hər iki dəyişiklik dəstini merge base-ə tətbiq etməyə çalışır
  • Addım 4 — Dəyişikliklər ziddiyyət təşkil etmirsə — merge avtomatik başa çatır
  • Addım 5 — Konflikt varsa — Git dayanır və həll tələb edir

Git üçtərəfli birləşdirmə alqoritmindən istifadə edir ki, bu da təkcə iki müqayisə edilən fayl versiyasını deyil, həm də onların ümumi əcdadını nəzərə alır. Bunun sayəsində Git bir budaqdakı dəyişikliklər digərinin dəyişdirilmiş hissələrinə toxunmadıqda avtomatik həll edə bilər — hər iki fayl dəyişdirilmiş olsa belə.

Merge alqoritminin nümunə ilə işləməsi

Ssenarini nəzərdən keçirək: iki proqramçı eyni funksiya budağında müxtəlif fayllar üzərində işləyir. Birincisi LoginActivity.kt-ni, ikincisi ProfileFragment.kt-ni dəyişdi. Onlar öz dəyişikliklərini birləşdirdikdə, Git dəyişikliklərin müxtəlif fayllara toxunduğunu görür və insan müdaxiləsi olmadan avtomatik merge yerinə yetirir.

Əgər hər iki proqramçı LoginActivity.kt-ni, lakin müxtəlif metodlarda dəyişibsə — Git də avtomatik öhdəsindən gəlir, dəyişiklikləri sətir-sətir birləşdirir. Konflikt yalnız hər ikisi eyni sətirləri dəyişdikdə və ya biri digərinin dəyişdirdiyi kodu sildikdə yaranır.

Merge zamanı konfliktlərin həlli

Merge konflikti o zaman yaranır ki, Git dəyişiklikləri avtomatik birləşdirə bilmir, çünki hər iki budaq eyni sətirləri fərqli şəkildə dəyişib. Bu halda Git fayllarda konfliktli hissələri qeyd edir və proqramçıdan əl ilə həll gözləyir.

Konfliktli hissələr xüsusi markerlərlə işarələnir: <<<<<<< HEAD hədəf budaqdan kodu göstərir, ======= — ayırıcı, >>>>>>> source-branch — mənbə budaqdan kodu. Proqramçı əl ilə hansı variantı saxlayacağını seçməli və ya onları birləşdirməlidir.

bash
# 1. Merge-i işə salmaq və konflikti görmək
git merge feature/new-login
# Nəticə: CONFLICT (content): Merge conflict in LoginActivity.kt

# 2. Konfliktli faylların siyahısına baxmaq
git status
# both modified: src/ui/login/LoginActivity.kt

# 3. Konflikti həll etmək: faylı redaktə etmək, markerləri silmək
# 4. Həll edilmiş faylı əlavə etmək və merge-i bitirmək
git add src/ui/login/LoginActivity.kt
git merge --continue
# və ya: git commit (--continue olmadan)

Konfliktləri həll etmək üçün alətlər mövcuddur: git mergetool vizual merger açır (Meld, Beyond Compare, VS Code). Bir çox proqramçı konfliktləri IDE-də həll etməyə üstünlük verir — IntelliJ IDEA və Android Studio üçpanelli müqayisə ilə daxili alət təqdim edir ki, bu da prosesi xeyli asanlaşdırır.

Konfliktlərin həlli üçün məsləhətlər: həmişə konfliktin hər tərəfinin nə etdiyini anlayın, başqasının kodunu onun məntiqini anlamadan silməyin və konflikt çox mürəkkəbdirsə — hər iki budağın müəllifini birgə həllə cəlb edin.

Merge vs Rebase: nə vaxt nəyi seçmək

Merge və Rebase arasında seçim — Git-də ən çox rast gəlinən memarlıq qərarlarından biridir. Hər iki yanaşma dəyişiklikləri birləşdirir, lakin fərqli şəkildə: merge budaqlanma tarixini qoruyur, rebase tarixi yenidən yazaraq onu xətti edir.

  • Merge — konteksti qoruyur: nə vaxt və hansı budaqdan birləşmənin edildiyi görünür. İctimai budaqlar (develop, main) və komanda işi üçün daha yaxşıdır
  • Rebase — lazımsız merge commitlər olmadan təmiz xətti tarix yaradır. İcmal üçün göndərməzdən əvvəl şəxsi funksiya budaqları üçün daha yaxşıdır
  • Qayda: digər proqramçıların istifadə etdiyi ictimai budaqları heç vaxt rebase etməyin

Bir çox komanda hibrid yanaşma istifadə edir: funksiya budağını develop-in cari vəziyyətinə gətirmək üçün rebase (git rebase develop), sonra birləşməni qeyd etmək üçün --no-ff bayrağı ilə merge. Bu, funksiya daxilində təmiz tarix və develop səviyyəsində məlumatlandırıcı birləşmə nöqtələri verir.

Tez-tez verilən suallar

Merge və merge --no-ff arasında nə fərq var?

--no-ff olmadan Git mümkün olduqda fast-forward merge yerinə yetirir — sadəcə budaq göstəricisini aparır. --no-ff ilə Git həmişə merge commit yaradır, budaqlanma haqqında məlumatı qoruyur. Komanda işində funksiya budaqları üçün tövsiyə olunur.

Merge konflikti çox böyükdürsə nə etməli?

Git mergetool istifadə edin və ya IDE-nin daxili alətini. Konflikt onlarla fayla təsir edirsə — bəlkə budaqlar çox ayrılıb. Bu halda komanda ilə birləşmə planını müzakirə etmək, bəlkə də onu bir neçə mərhələyə bölmək dəyər.

Merge-i ləğv etmək mümkündür?

Bəli: git merge --abort merge-i ləğv edir, əgər hələ başa çatmayıbsa (konflikt). Merge artıq başa çatıbsa — təhlükəsiz geri qaytarma üçün git reset --hard HEAD~1 və ya git revert -m 1 <merge-commit> istifadə edin.

Hər funksiya üçün merge commit yaratmaq lazımdırmı?

Komanda işi üçün tövsiyə olunur. Merge commit birləşmə faktını qeyd edir, hər iki budağa istinadlar ehtiva edir və tarixi anlamağı asanlaşdırır. Şəxsi və ya eksperimental budaqlar üçün squash merge və ya fast-forward məqbuldur.

Merge ikili fayllarla necə işləyir?

Git ikili faylları avtomatik birləşdirə bilmir — versiyalardan birini tamamilə seçir. İkili fayllar (şəkillər, .aab, .apk) üçün paralel dəyişiklikləri minimuma endirmək və böyük fayllar üçün Git LFS istifadə etmək tövsiyə olunur.

Nəticə

  • Merge — bir budaqdan digərinə dəyişiklikləri birləşdirmək üçün Git-in əsas əməliyyatı
  • Fast-forward — ayrılma olmadıqda merge commit olmadan xətti birləşdirmə
  • Three-way merge — iki valideynli merge commit yaradır, konteksti qoruyur
  • Squash merge — bütün budaq commitlərini birinə sıxışdırır, funksiya tarixini itirir
  • Konfliktlər eyni sətirlər dəyişdirildikdə yaranır və əl ilə həll olunur
  • Merge Rebase-dən fərqlənir: birincisi budaqlanmanı qoruyur, ikincisi tarixi xətti edir
  • İctimai budaqlar üçün --no-ff ilə merge tövsiyə olunur, şəxsi üçün — rebase və ya squash

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.

Layihəni müzakirə et

Həm də oxuyun