CodeGym /Kurslar /JAVA 25 SELF /Təhlükəsiz eksperimentlər: budaqlarla iş

Təhlükəsiz eksperimentlər: budaqlarla iş

JAVA 25 SELF
Səviyyə, Dərs
Mövcuddur

1. Budaqlar nədir və nə üçün lazımdır?

Git-də branches ilə iş — versiyaların idarə edilməsinin əsas aspektlərindən biridir; bu, bir repozitoriyada bir neçə inkişaf xəttini paralel aparmağa imkan verir. Budaqlanma Git-i əməkdaşlıq, eksperimentlər və layihənin müxtəlif versiyalarını idarə etmək üçün güclü bir alət edir.

            gitGraph
            commit id: "Initial setup"
            commit id: "Add base features"
            branch feature/new-idea
            checkout feature/new-idea
            commit id: "Implement new logic"
            commit id: "Refactor the logic"
            checkout main
            commit id: "Urgent bugfix on main"
            merge feature/new-idea
            commit id: "Prepare for release"
        
Əsas budaq olan main-dən təhlükəsiz inkişaf üçün yeni bir budaq — feature/new-idea — ayrılır. İş bitdikdən sonra o, yenidən main-ə birləşdirilir.

Təsəvvür edin ki, layihənizdə nəsə ciddi dəyişdirmək və ya riskli bir eksperiment aparmaq istəyirsiniz. Git olmasa nə edərdiniz? Yəqin ki, bütün layihəni yeni bir qovluğa kopyalayıb orada işləyərdiniz. Nəticə xoşunuza gəlsə — onu əsas qovluğa keçirərdiniz. Əks halda — sadəcə kopyanı silərdiniz.

Git-də budaqlar eyni prinsiplə işləyir, sadəcə daha zərifdir. Gəlin bunu kitab yazma nümunəsi ilə nəzərdən keçirək:

  1. Sizin hazır bir əlyazmanız var (bu, əsas budağınız — main-dir).
  2. Siz alternativ sonluq yazmaq istəyirsiniz (məsələn, feature/new-idea adlı yeni budaq yaradırsınız).
  3. Yeni sonluğu yazırsınız, əsas mətnə toxunmadan (yeni budaqda işləyirsiniz).
  4. Yeni sonluq daha yaxşı olarsa, köhnəsini onunla əvəz edirsiniz (budaqları birləşdirirsiniz — merge).
  5. Lazımsız sonluqlu köhnə qaralamanı silmək olar (budağı silirsiniz).

2. Yeni budaq yaratmaq və onda işləmək

Addım 1. Budaq idarəetmə menyusunu açın.

IDE-nin yuxarı panelində cari budağın adını göstərən bir vidcet var (standart olaraq — main). Ona klikləyin və + New Branch seçin.

Addım 2. Yeni budağın adı.

Yaxşı təcrübə — budaqlara həll etdiyiniz tapşırığa uyğun ad verməkdir. Məsələn, feature/add-usage-examples.

Budağı yaratdıqdan sonra IDE avtomatik olaraq ona keçəcək. Eyni vidcetdə yeni adı görəcəksiniz.

Addım 3. Dəyişiklikləri edin və commit edin.

Artıq öz “sandbox”-ınızdasınız. Gəlin faylımıza README.md istifadə nümunələri olan yeni bir bölmə əlavə edək. Dəyişiklikləri edin və ötən mühazirədə öyrəndiyiniz kimi commit edin.

3. Budaqlar arasında keçid

İstifadə nümunələri ilə dəyişiklikləriniz indi feature/add-usage-examples budağında etibarlı şəkildə saxlanılıb. Gəlin əsas budaq main-ə qayıdaq və orada nə var, baxaq.

Addım 1. Yenidən cari budağın adını göstərən vidcetə klikləyin.

Addım 2. Local və ya Recent siyahısında main budağını seçin və açılan alt menyuda Checkout-a klikləyin.

Addım 3. Nəticəni yoxlayın.

Keçid edər-etməz, README.md faylını açın. Görəcəksiniz ki, orada istifadə nümunələri bölməsi yoxdur! O, digər budaqda qalıb. Beləliklə, yeni funksionallıq üzərində işləyərkən main budağındakı stabil versiyaya toxunmamış olursunuz.

4. Budaqların birləşdirilməsi (Merge)

merge əmri feature/add-examples budağındakı bütün commit-ləri (bu nümunədə, C3 commit-i) götürüb cari main budağı ilə birləşdirir və yeni bir birləşdirmə commit-i yaradır.

            gitGraph
            commit id: "C1"
            commit id: "C2"
            branch feature/add-examples
            checkout feature/add-examples
            commit id: "C3: Add new section"
            checkout main
            merge feature/add-examples
        

Beləliklə, siz feature/add-usage-examples budağında tapşırığınız üzərində işi bitirdiniz və bu dəyişiklikləri əsas layihəyə əlavə etmək istəyirsiniz.

Addım 1. Hədəf budağa keçin.

Dəyişiklikləri əlavə etmək istədiyiniz budaqda — HARA əlavə edəcəyiniz budaqda — olduğunuzdan əmin olun. Bizim halda bu, main-dir.

Addım 2. Birləşdirmə aparın.

Yenə budaq idarəetmə vidcetini açın. Siyahıdan dəyişiklikləri HARADAN götürmək istədiyiniz budağı seçin (feature/add-usage-examples) və alt menyuda Merge feature/add-usage-examples-i main-ə seçin.

Addım 3. Nəticəni yoxlayın.

Artıq main budağındakı README.md faylında sizin yeni bölməniz — istifadə nümunələri — görsənir. İşinizi layihənin əsas versiyası ilə uğurla birləşdirdiniz!

5. Birləşdirmədə münaqişələr: qorxmayın, bu normaldır!

Bəzən budaqları birləşdirərkən münaqişələr yaranır. Bu, hər iki budaqda eyni fayldakı eyni sətirlərin dəyişdirildiyi halda baş verir. Git hansı versiyanın doğru olduğunu özü müəyyən edə bilmir və sizin köməyinizi istəyir.

            gitGraph
            commit id: "C1: Ümumi baza"
            branch feature/new-title
            checkout main
            commit id: "C2: main-də dəyişiklik"
            checkout feature/new-title
            commit id: "C3: feature-də dəyişiklik"
        
Hər iki budaq, main və feature/new-title, ümumi əcdaddan (C1) başlayaraq yeni commit-lərə (C2 və C3) malikdir. Bu, birləşdirmə zamanı mütləq münaqişəyə səbəb olacaq.

Gəlin münaqişəni modelləşdirək:

  1. main budağında olduğunuzdan və yadda saxlanmamış dəyişiklikləriniz olmadığından əmin olun.
  2. Elə indi feature/new-title adlı yeni budaq yaradın, lakin hələ ona keçməyin. Checkout branch işarəsinin qoyulmadığından əmin olun.
  3. İndi, main budağında ikən, README.md-də ilk sətri “My Awesome Project” olaraq dəyişin və commit edin.
  4. feature/new-title budağına keçin. Görəcəksiniz ki, README.md-də ilk sətir burada hələ köhnə olaraq qalıb: bu, budaq yaradıldığı andakı faylın vəziyyətidir. Eyni sətri “My Super Project” olaraq dəyişin və commit edin.
  5. main budağına qayıdın və feature/new-title ilə birləşdirmə aparın.

İndi Git görəcək ki, hər iki budaq ümumi əcdaddan başlayaraq fərqli istiqamətlərdə inkişaf edib. Hər iki tarixçədə eyni sətir dəyişdirildiyindən, Git hansı versiyanın düzgün olduğuna qərar verə bilməyəcək və sizə münaqişənin həlli üçün pəncərə göstərəcək.

Merge Revision

Burada nə görürsünüz:

  • Solda (Your changes): hazırda olduğunuz budaqdan (main) faylın versiyası.
  • Sağda (Changes from branch...): birləşdirdiyiniz budaqdan faylın versiyası.
  • Mərkəzdə (Result): sizin formalaşdırmalı olduğunuz yekun fayl versiyası.

Hər hansı varianta bütövlükdə üstünlük vermək üçün >> və ya << oxlarına klikləyə bilərsiniz.

Mərkəzi paneldəki nəticə sizi qane etdikdə, Apply düyməsini klikləyin. IDE özü birləşdirmə commit-i yaradacaq və münaqişə həll olunacaq.

Niyə münaqişə yaranmadı?

Elə bir vəziyyət ola bilər ki, bütün addımları etmisiniz, amma münaqişə baş verməyib. Çox vaxt bu, Git-in fast-forward merge edə bilməsi ilə bağlıdır, çünki bir budağın tarixçəsi sadəcə digərinin tarixçəsini davam etdirib. Münaqişənin təmin olunması üçün budaqların tarixçəsi ümumi əcdaddan sonra müxtəlif istiqamətlərə ayrılmalıdır.

Nümunə:

  1. Sizin main-də müəyyən bir commit var (tutaq ki, C1).
  2. Siz main-də “My Awesome Project” mətnli yeni commit edirsiniz. Budaq main indi C2 commit-inə işarə edir (main -> C1 -> C2).
  3. Siz feature/new-title budağını main-in cari vəziyyətindən yaradırsınız. Bu o deməkdir ki, yeni budaq da C2 commit-indən başlayır.
  4. Siz feature/new-title-da “My Super Project” mətnli commit edirsiniz. Bu budaq “irəli gedir” və indi C3 commit-inə işarə edir (feature/new-title -> C1 -> C2 -> C3).
  5. Siz yenidən main-ə (hələ də C2 commit-indədir) qayıdırsınız və feature/new-title-ı birləşdirməyi əmr edirsiniz.

Git vəziyyətə baxır və görür ki, main budağı feature/new-title budağının birbaşa əcdadıdır. Siz başqa budaqda işləyərkən main tarixçəsində heç bir yeni commit olmayıb. Git düşünür: “Aha, deməli, sadəcə main-i C3 commit-inə qədər irəli çəkmək lazımdır. Heç bir ziddiyyət yoxdur”. Və o, sadəcə main göstəricisini C3 commit-inə keçirir.

            gitGraph
            commit id: "C1"
            commit id: "C2"
            branch feature/new-title
            checkout feature/new-title
            commit id: "C3"
            checkout main
            merge feature/new-title
        

6. Dəyişikliklər tarixçəsinə baxış

Layihənizdə nə baş verdiyini daha yaxşı anlamaq üçün onun tarixçəsinə baxmaq faydalıdır.

IDE-nin aşağı hissəsində Git sekmesini açın və Log seçin. Bütün budaqlarınızın və commit-lərinizin qrafik təqdimatını görəcəksiniz. Bu, hansı budağın hansından ayrıldığını və harada birləşdirildiyini vizual olaraq izləməyə kömək edəcək.

Burada istənilən commit-ə klikləyərək ona daxil olan dəyişiklikləri, onu kimin və nə vaxt etdiyini görə bilərsiniz. Bu, kod üçün əsl vaxt maşınıdır!

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Memarlıq Bürosu: Formaların Sahələrinin Hesablanması 🧱
Memarlıq Bürosu: Formaların Sahələrinin Hesablanması 🧱
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Təkmilləşdirilmiş E-poçt Klienti: Məktub Yaratma 📦
Təkmilləşdirilmiş E-poçt Klienti: Məktub Yaratma 📦
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION