11.1 Git-də Şaxələr
Git-də branches
(şaxələrlə) işləmək — versiya idarəsinin əsas elementlərindən biridir və bir repozitoriyada paralel bir neçə inkişaf xətti aparmağa imkan verir. Şaxələnmə Git-i kolaborasiya, eksperimentlər və layihənin fərqli versiyalarını idarə etmək üçün güclü bir alət edir.

Git-də şaxələri qovluqlar kimi düşünə bilərsiniz, burada git sizin layihənizi kopyalayır. Sizin layihənizin əsas qovluğu sizin lokal repozitoriyanızda — main olaraq adlanır və git bu qovluğun kopyalarını yaradaraq sizə eksperimentlər aparmağa imkan verir, beləliklə əsas, yaxşı işləyən kodunuz zərər görmür. Bu cür qovluq-kopyalara şaxələr — branches
deyilir.
Şaxələr — kodun alternativ variantlarıdır. Tutaq ki, siz böyük bir layihədə nəyisə dəyişmək, hansısa eksperiment aparmaq istəyirsiniz və tam əmin deyilsiniz ki, bu dəyişiklik işləyəcək. Bunu git olmadan necə edərdiniz?
Layihəni yeni bir qovluğa kopyalayaraq bütün dəyişiklikləri orada edə bilərsiniz. Əgər nəticədən razı qalsanız, onu əsas qovluğa əlavə edə bilərsiniz. Əgər təsir etməsə — sadəcə unutmaq olar və ya qovluğu tamamilə silmək.
Gəlin həyatdan bir nümunəyə baxaq. Tutaq ki, kitab yazırsınız:
- Sizin kitabın əlyazması var (əsas şaxə).
- Siz sonluğu dəyişmək istəyirsiniz (yeni bir şaxənin yaradılması).
- Yeni sonluğu ayrıca bir sənəddə yazırsınız (yeni şaxədə işləmək).
- Əgər yeni sonluq daha yaxşıdırsa, onu əlyazmada köhnə sonluğun yerinə yazırsınız (şaxələrin birləşdirilməsi).
- Yeni sonluğu olan ayrı sənədi silirsiniz (şaxənin silinməsi).
11.2 Şaxələrin yaradılması
WebStorm-da şaxə yaratmaq çox asandır:

Şaxə adını daxil edin:

WebStorm dərhal cari şaxənizin adını menyunun yuxarısında göstərəcək:

Bəs orda əvvəl nə var idi?
Orda sizin ilk və əsas şaxənizin adı var idi — main
.
İndi isə orda test
göstərilir, bu isə o deməkdir ki, Git (WebStorm-un rəhbərliyində) nəinki yeni bir şaxə yaratdı, həm də dərhal ona keçid etdi.
İndi cari test
şaxəsindəki main.html
faylına bir az kod əlavə edib commit edək:

11.3 Şaxələr arasında keçid
Addım 1. Şaxəni seçirik.
İndi isə gəlin köhnə şaxəmizə keçək. Üst menyuya klikləyək və orada nə görürük?

Təlaşlanmayın — hər şey sadədir:
Local — bu sizin yerli git-repository-nizin şaxələr siyahısıdır. Burada iki dənə var:
test
main
Remote — bu isə sizin uzaq repository-nizdir, yəni GitHub serverində yerləşən repository. Biz ora dəyişikliklərinizi push etmişik, amma yeni şaxə yoxdur, bu da məntiqlidir. Uzaq repository origin
adı daşıyır və orada yalnız main
şaxəsi var.
Recent — bu sadəcə olaraq son işlədiyiniz şaxələrin adlarının siyahısıdır: bu bölmə istifadə rahatlığı və sürət üçün WebStorm tərəfindən əlavə olunub.
Yerli repository adı ilə sağ tərəfdə olan origin/main
- bu, hazırda sinxronizasiya edilmiş uzaq repository-nin adı və dəyişikliklərin ora push ediləcəyi yerdir.
Addım 2. Şaxənin kodunu cari qovluğa yükləyirik.

Addım 3. Yoxlayırıq.
Məndə main
şaxəsi və köhnə kod göstərilir:

11.4 Şaxələrin Birləşməsi

Gəlin indi kodumuzu iki şaxədən birləşdirməyə çalışaq.
Addım 1. Əvvəlcə layihəmizə bir daha fayl əlavə edək — index.html
və onun içində bir az kod yazaq:
index.html
faylını yaradırıq- Onun içində
<h1>Hello</h1>
kodunu yazırıq - Faylı commit edirik
Budur, main
şaxəsindəki iki faylım belə görünür:

Addım 2. Şaxələrin birləşməsi.
Hazırkı main
şaxəmizə test
şaxəsində edilən dəyişiklikləri daxil edirik.
Bunun üçün, yuxarı menyudan Merge ‘test’ into ‘main’
komandasını istifadə edirik:

Addım 3. Nəticəni yoxlayırıq.

Yoxlayırıq:
- Yuxarıda hələ də
main
şaxəsi göstərilir - Bizdə 2 fayl var:
index.html
vəmain.html
main.html
faylındatest
şaxəsində əlavə olunan kod var
11.5 Birleştirmə zamanı konfliktlər
Bəzən şəbəkələri birləşdirəndə konfliktlər olur.
Əgər bir faylda müxtəlif şəbəkələrdə dəyişiklik etmisinizsə və onları birləşdirməyə çalışırsınızsa, konflikt yaranacaq.
Mətn fayllarının konflikti
Git - çox ağıllı bir sistemdir - o, fayl tiplərini anlayır. Əgər fərqli yerlərdə mətn kimi qəbul etdiyi fayllarda dəyişikliklər etsəniz, Git bu dəyişiklikləri avtomatik olaraq uyğun yerlərə köçürəcək (sanki bunu bir insan edirmiş kimi).
Binari faylların konflikti
Amma haradasa şəkil və ya sənəd redaktə etsəniz, Git onların hissələrini birləşdirməyə çalışmayacaq. Sadəcə sizdən qərar vermənizi istərcək ki, hansı versiyanı hazırkı şəbəkədə saxlamaq istəyirsiniz.
Konfliktlərin əl ilə həlli
Əgər mətn faylının eyni yerində dəyişiklik etsəniz, Git fərqli versiyaları düzgün birləşdirə bilməyəcək və bunu sizin etməyinizi təklif edəcək:

Bu belə görünə bilər:

Burada nə görürsünüz:
- Sol tərəfdə —
main.html
faylınınmain
şəbəkəsinin içərisində olan məzmunu - Sağ tərəfdə —
main.html
faylınıntest
şəbəkəsinin içərisində olan məzmunu - Ortada WebStorm sizə son kod versiyasını yazmağı təklif edir (düymələrə
>>
və<<
vuraraq bir fayldan avtomatik dəyişiklikləri daxil edə bilərsiniz)
Mater versiyasını qəbul etdim və kodu əlimlə yenidən yazdım. Bu nəticə alındı:

11.6 Dəyişikliklərin tarixi
Faydalı və maraqlı bir şey. İstənilən faylın dəyişikliklər tarixini görmək üçün Show History düyməsinə klikləyə bilərsiniz. Onun iki yerdə olması mümkündür. Onu tapın.
Faylın main.html
üçün dəyişikliklərin tarixi mənim üçün belə görünür:

İzahlar:
- Solda müəyyən faylın dəyişikliklər tarixini görürsünüz:
- Dəyişiklik nə qədər yenidirsə, o qədər üstdədir, nə qədər köhnədirsə, o qədər altdadır
- Burada həmçinin şaxələrin birləşdirilməsi tarixi də göstərilir
- Sağda — konkret commit-də edilən dəyişikliklər
GO TO FULL VERSION