Birləşdirmə (merge) — bu nədir, merge necə işləyir və birləşdirmə strategiyaları

Müəllif: IT Sectr Dərc olunub: 2026-08-01 Oxuma vaxtı: 9 dəq

Merge — bu, Git-də budaqların birləşdirilməsi əməliyyatıdır və iki fərqli inkişaf xəttindəki dəyişiklikləri bir hədəf budaqda birləşdirir. Rebase-dən fərqli olaraq, merge iki valideyni olan xüsusi merge commiti yaradaraq budaqlanmanın tam tarixçəsini saxlayır. Rəsmi Git sənədlərinə (2026) görə, merge budaqları birləşdirməyin ən təhlükəsiz üsuludur, çünki tarixçəni yenidən yazmır və nə vaxt, hansı budaqların birləşdirildiyini izləməyə imkan verir. Bu, main, develop və release kimi ictimai budaqlarda birləşdirmə üçün standart seçimdir.

Əsas məqamlar

  • Merge — hər iki budağın tarixçəsini qoruyan merge commiti ilə budaqların birləşdirilməsi.
  • Merge commiti — iki valideyni olan, birləşmə faktını qeyd edən xüsusi commit.
  • Birləşdirmə strategiyaları — recursive, octopus, ours, squash — hər biri müxtəlif ssenarilər üçün uyğundur.
  • Münaqişələr — eyni sətirlər hər iki budaqda eyni anda dəyişdirildikdə yaranır və əl ilə həll tələb edir.
  • Təhlükəsizlik — merge mövcud commitləri dəyişmir, buna görə də ictimai budaqlar üçün təhlükəsizdir.

Git-də merge nədir

Merge — bu, göstərilən budaqdakı dəyişiklikləri cari budaqda birləşdirən git merge əmrindədir. Git ortaq əcdadı (ümumi baza commiti) tapır, hər budağın əcdada nisbətən diffini hesablayır və birləşdirilmiş dəyişikliklər toplusunu ehtiva edən merge commiti yaradır. Nəticə — hədəf budaq birləşdirilən budaqdakı bütün dəyişikliklərlə tamamlanır.

Sintaksis: hədəf budaqda (məsələn, main) olarkən git merge feature yerinə yetirin. Münaqişə yoxdursa, Git avtomatik olaraq merge commiti yaradır. Merge commitinin standart mesajında qeyd olunur: “Merge branch 'feature' into main”. Mesaj -m bayrağı ilə dəyişdirilə və ya açılan redaktorda redaktə edilə bilər.

Merge dağıdıcı olmayan əməliyyatdır. Rebase-dən fərqli olaraq, merge mövcud commitlərə toxunmur: onlar eyni heşlər, müəlliflər və tarixlərlə qalır. Bu, merge-i eyni anda bir neçə proqramçının işlədiyi budaqlar üçün yeganə təhlükəsiz birləşdirmə üsulu edir. Bir şey səhv gedərsə, merge git merge --abort əmri ilə ləğv edilə bilər.

bash
# Hədəf budağa keç
git checkout main

# Funksiya budağını birləşdir
git merge feature

# Nəticə — iki valideyni olan merge commiti
git log --oneline --graph

# Xüsusi mesajla birləşdir
git merge feature -m "feat: integrate authentication module"

Merge növləri: regular, squash, fast-forward

Git üç birləşdirmə rejimini dəstəkləyir, onlar istənilən nəticədən asılı olaraq seçilir. Regular merge (standart) merge commiti yaradır. Squash merge funksiya budağının bütün commitlərini birinə birləşdirir. Fast-forward — mümkün olduqda commit yaratmadan budaq göstəricisini irəli aparır. Rejimin seçimi komandanın workflow-undan və tarixçə qaydalarından asılıdır.

Regular merge (--no-ff) — birləşdirmə fast-forward edilə bilsə belə merge commiti yaradır. Main budağı üçün tövsiyə olunur: merge commiti funksiyanın inteqrasiya anını açıq şəkildə qeyd edir və bir revert merge commiti ilə funksiya budağının bütün dəyişikliklərini asanlıqla geri qaytarmağa imkan verir. GitHub PR-ləri Merge düyməsi ilə birləşdirərkən bu rejimi standart olaraq istifadə edir.

Squash merge (--squash) — funksiya budağının bütün commitlərini hədəf budaqda bir commitə toplayır. Funksiya budağının qaralama tarixçəsinin main-a düşməməsi lazım olduqda faydalıdır. Çatışmazlıq: orijinal commitlərlə əlaqə itir — funksiyanın addım-addım necə hazırlandığını görmək mümkün deyil. GitHub PR-də “Squash and merge” seçərkən bu rejimi istifadə edir.

Fast-forward (--ff) — hədəf budaqda funksiya ayrıldıqdan sonra yeni commitlər yoxdursa, Git sadəcə göstəricini irəli aparır, merge commiti yaratmadan. Tarixçə xətti qalır. --no-ff bayrağı məcburi merge commiti yaradır, --ff-only fast-forward mümkün deyilsə xəta ilə bitəcək.

bash
# Məcburi merge commiti (main üçün tövsiyə olunur)
git merge --no-ff feature

# Squash merge — bütün commitlər birinə
git merge --squash feature
git commit -m "feat: add authentication"

# Yalnız mümkün olduqda fast-forward
git merge --ff-only feature

# Münaqişəli merge-i ləğv et
git merge --abort

Git birləşdirmə strategiyaları

Birləşdirmə strategiyaları Git-in dəyişiklikləri birləşdirmək üçün istifadə etdiyi alqoritmi müəyyən edir. Hər strategiya müxtəlif ssenarilər üçün uyğundur. Git avtomatik olaraq uyğun strategiyanı seçir, lakin proqramçı onu --strategy bayrağı ilə açıq şəkildə göstərə bilər. Strategiyaları başa düşmək mürəkkəb birləşdirmələrdə Git-in davranışını proqnozlaşdırmağa kömək edir.

Recursive — iki budağın birləşdirilməsi üçün standart strategiya. Git ortaq əcdadı tapır, hər budaqdakı dəyişiklikləri hesablayır və onları birləşdirir. Ortaq əcdad tapılarsa, recursive faylların ad dəyişdirməsini və yenilərinin əlavə edilməsini düzgün idarə edir. Münaqişələrdə recursive əlavə seçimlərdən istifadə edə bilər: ours (avtomatik olaraq bizim versiyanı seç) və theirs (onların versiyasını seç).

Octopus — ikidən çox budağın eyni vaxtda birləşdirilməsi üçün: git merge feature1 feature2 feature3. Octopus münaqişələrin həllini dəstəkləmir — bütün münaqişələr əmr çağırılmazdan əvvəl həll edilməlidir. Nadir hallarda istifadə olunur, əsasən toqquşmayacağına zəmanət olan bir neçə müstəqil budağı birləşdirmək üçün (məsələn, müxtəlif modullar).

StrategiyaBudaqların sayıMünaqişələrin həlli
Recursive2Avtomatik + ours/theirs seçimləri
Octopus3+Yox — bütün münaqişələr əvvəlcədən həll edilməlidir
OursİstənilənHəmişə bizim versiyanı seçir, kənar dəyişikliklər nəzərə alınmır
Subtree2Alt ağacların birləşdirilməsi üçün (subtree merge)

Ours — birləşdirilən budaqdakı dəyişiklikləri tamamilə nəzərə almayan və hədəf budağın cari məzmununu saxlayan xüsusi strategiyadır. Merge commiti yaradılır, lakin məzmun dəyişməz qalır. Tarixçədə birləşmə faktını qeyd etmək, lakin kənar budaqdakı bütün dəyişiklikləri rədd etmək lazım olduqda faydalıdır.

Merge münaqişələrinin həlli

Merge münaqişəsi eyni fayl sətirləri hər iki budaqda fərqli şəkildə dəyişdirildikdə yaranır. Git hansı versiyanın düzgün olduğunu avtomatik müəyyən edə bilmir və merge-i dayandırır. Münaqişə həmçinin bir budaqda faylın adı dəyişdirildikdə və digərində dəyişdirildikdə və ya eyni fayl eyni anda silinib dəyişdirildikdə yarana bilər.

Həll prosesi: Git münaqişəli faylları markerlərlə qeyd edir. Faylda <<<<<<< HEAD (bizim versiya), ======= (ayırıcı) və >>>>>>> feature (onların versiyası) olan hissələr görünür. Proqramçı əl ilə münaqişəli hissəni redaktə edir, hər iki versiyadan lazımi sətirləri seçir, markerləri silir, faylı yadda saxlayır və git add ilə indeksə əlavə edir.

Münaqişələrin vizual həlli üçün Git mergetool — xarici müqayisə alətini dəstəkləyir. Populyar mergetool alətləri: Meld, KDiff3, Beyond Compare, VS Code (daxili münaqişə redaktoru). Mergetool üç panel göstərir: bizim versiya, onların versiya və nəticə. Proqramçı vizual olaraq yekun fayla daxil ediləcək kod bloklarını seçir.

bash
# Merge-ə başla və münaqişəni aşkarla
git merge feature
# MÜNAQİŞƏ (məzmun): src/main.swift faylında merge münaqişəsi

# Münaqişəli faylları yoxla
git status

# Vizual mergetool-u aç
git mergetool

# Həll etdikdən sonra — əlavə et və commit et
git add src/main.swift
git commit

# Merge-i ləğv et
git merge --abort

Nə vaxt merge əvəzinə rebase seçməli

Merge rebase-dən üstündür bir neçə əsas vəziyyətdə. Birinci: digər proqramçılar üçün əlçatan olan ictimai budaqlarla işləyərkən. Merge tarixçəni yenidən yazmır və həmkarlar təhlükəsiz sinxronlaşa bilər. İctimai budaqda rebase ayrılan tarixçə və köhnə commitləri artıq almış hər kəsdə münaqişələr yaradacaq.

İkinci vəziyyət: funksiya budağını tamamlayarkən. Əksər komandalar funksiyanın inteqrasiya anını qeyd etmək üçün main-a merge (--no-ff bayrağı ilə) üstünlük verir. Bu, tarixçədə naviqasiyanı asanlaşdırır və bir git revert merge commiti ilə bütün funksiyanı asanlıqla geri qaytarmağa imkan verir. GitHub Flow standart olaraq üç merge seçimi təklif edir: sadə merge, squash merge və rebase merge.

Üçüncü vəziyyət: icmaldan keçmiş pull request ilə işləyərkən. GitHub və GitLab müxtəlif seçimlərlə merge düyməsi təklif edir. Merge (Create a merge commit) — merge commiti ilə tam tarixçə. Squash and merge — inkişaf detalları olmadan təmiz tarixçə. Rebase and merge — merge commiti olmadan xətti tarixçə, lakin commitlərin yenidən yazılması ilə. Seçim komandanın qaydalarından asılıdır.

  • İctimai budaqlar (main, develop) — yalnız merge, heç vaxt rebase.
  • PR-nin tamamlanması — inteqrasiya anını qeyd etmək üçün --no-ff ilə merge.
  • Kənar commitləri olan budaqlar — merge kənar işi yenidən yazmır.
  • Buraxılışdan əvvəl — merge daha təhlükəsizdir, çünki daha az risk var.
  • Birgə budaq — budaq üzərində bir neçə proqramçı işləyirsə, merge məcburidir.

Budaqların birləşdirilməsi üçün ən yaxşı təcrübələr

Birinci qayda: merge-dən əvvəl həmişə hədəf budağın aktual versiyasında olun. Funksiyanı birləşdirməzdən əvvəl git checkout main && git pull yerinə yetirin. Bu, münaqişələri minimuma endirir və merge commitinin bütün aktual dəyişiklikləri ehtiva edəcəyinə zəmanət verir. Hədəf budaq çox irəli gedibsə, əvvəlcə funksiya budağında git merge main-i yerinə yetirin ki, münaqişələr onun kontekstində həll olunsun.

İkinci qayda: merge-dən sonra kodu test edin. Merge münaqişə olmasa belə davranışı dəyişə bilər. CI/CD pipeline-i istehsala göndərməzdən əvvəl merge commitində testlər keçirməlidir. Bəzi komandalar merge gates — merge-i keçidən əvvəl bloklayan məcburi yoxlamalardan istifadə edir.

Üçüncü qayda: merge commitlərini sənədləşdirin. Standart “Merge branch 'feature' into main” mesajı az faydalıdır. Nə birləşdirildiyinin təsvirini əlavə etmək tövsiyə olunur: “Merge authentication module: login, registration, password recovery”. Bu, tarixçə analizini və reqressiyaların axtarışını asanlaşdırır. Böyük layihələrdə merge commitləri avtomatik olaraq PR adından yaradılır.

  • Aktuallıq — merge-dən əvvəl hədəf budağın yeniləndiyinə əmin olun (git pull).
  • Test etmə — CI/CD nəticə merge commitində testlər keçirməlidir.
  • Təsviri mesajlar — merge commitində hansı funksiyanın birləşdirildiyini göstərin.
  • Tezlik — funksiya budaqlarını mümkün qədər tez və tez-tez birləşdirin (maksimum bir həftə).
  • Ləğv etmə — git revert merge commiti bütün funksiyanı tamamilə geri qaytarır.

Tez-tez verilən suallar

Git-də budaqları birləşdirmək (merge) nə deməkdir?

Birləşdirmək (merge) — dəyişiklikləri bir budaqdan digərinə birləşdirmək üçün git merge-i yerinə yetirmək. Nəticə birləşmə faktını qeyd edən və hər iki budaqdakı dəyişiklikləri ehtiva edən merge commitidir. Bu, Git Flow-da funksiya budaqlarının main, develop və ya release-ə inteqrasiyasının əsas üsuludur.

Squash merge adi merge-dən nə ilə fərqlənir?

Squash merge funksiya budağının bütün commitlərini hədəf budaqda bir commitdə birləşdirir, aralıq inkişaf tarixçəsini itirərək. Adi merge funksiya budağının bütün commitlərini saxlayaraq merge commiti yaradır. Squash merge təmiz tarixçə verir, lakin funksiyanın addım-addım işlənməsini izləməyə imkan vermir.

Git-də merge münaqişəsini necə həll etmək olar?

Münaqişəli faylı açın, <<<<<<< HEAD>>>>>>> markerləri olan hissələri tapın. Məzmunu redaktə edin, hər iki versiyadan lazımi sətirləri saxlayın, markerləri silin. Faylı yadda saxlayın, git add və git commit yerinə yetirin. Vizual həll üçün git mergetool istifadə edə bilərsiniz.

Nə vaxt rebase əvəzinə merge istifadə etməli?

Merge həmişə ictimai budaqlar (main, develop, release) üçün istifadə olunur, çünki tarixçəni yenidən yazmır. Rebase şəxsi funksiya budaqlarında onlar dərc edilməmişdən əvvəl tətbiq olunur. Budaq ümumi deponun bir hissəsi olduqdan və həmkarlar ona müraciət etdikdən sonra yalnız merge icazəlidir.

Git-də merge-i necə ləğv etmək olar?

Merge tamamlanmazdan əvvəl (münaqişə zamanı) — git merge --abort birləşdirməni tamamilə ləğv edir. Tamamlandıqdan sonra — git revert <merge-commit-hash> -m 1 geri qaytaran commit yaradır. -m 1 bayrağı hansı valideyn budağının saxlanacağını göstərir (hədəf). Dərc edilmiş budaqlar üçün git revert git reset-dən daha təhlükəsizdir.

Nəticə

  • Merge — iki valideyni olan merge commiti yaradaraq tarixçənin qorunması ilə budaqların təhlükəsiz birləşdirilməsi.
  • Birləşdirmə rejimləri — müxtəlif məqsədlər üçün regular (--no-ff), squash (--squash) və fast-forward (--ff).
  • Strategiyalar — recursive (standart), octopus (3+ budaq), ours (kənar dəyişikliklərə məhəl qoymama).
  • Münaqişələr — işarələnmiş hissələrin redaktəsi və ya mergetool vasitəsilə əl ilə həll olunur.
  • Təhlükəsizlik — merge mövcud commitləri dəyişmir, buna görə də ictimai budaqlar üçün təhlükəsizdir.
  • Squash merge — bütün commitləri birinə birləşdirir, aralıq inkişaf tarixçəsini itirir.
  • Merge-in ləğvi — dərc edilmiş dəyişikliklərin təhlükəsiz geri qaytarılması üçün -m 1 bayrağı ilə git revert merge commiti.

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