Sobes.tech
Junior

Squash nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Git-də squash (sıkıştırma), bir neçə commit-in birləşdirilməsidir. Bu, commit tarixçəsini sadələşdirməyə, onu daha nizamlı və oxunaqlı etməyə imkan verir.

Əsasən, squash aşağıdakı hallarda həyata keçirilir:

  • Xüsusiyyət şaxəsinin əsas şaxə ilə birləşdirilməsi (feature branch merge). Qısa şaxə çox kiçik commit-lərlə (düzəlişlər, kosmetik dəyişikliklər) böyük bir commit-ə çevrilə bilər, bu da bütün funksionallığı təmsil edir.
  • Commit tarixçəsinin redaktəsi (interaktiv rebase). Bu, ardıcıl commit-ləri birləşdirməyə və dəyişiklikləri daha təmiz təqdim etməyə imkan verir.

Squash prosesi adətən aşağıdakı mərhələləri əhatə edir:

  1. Commit-lərin seçilməsi: Birləşdiriləcək commit-lərin diapazonunu müəyyən etmək.
  2. Redaktə (interaktiv rebase): git rebase -i <diapazon əvvəlki commit> və ya git rebase -i HEAD~<commit sayı> əmrlərindən istifadə etmək.
  3. squash və ya s işarəsi: Açılan redaktorda, əvvəlki ilə birləşdiriləcək commit-ləri squash və ya qısaldılmış s ilə işarələmək. Siyahının ilk commit-i pick ilə saxlanılır.
  4. Mesajın redaktəsi: Git, yeni commit üçün mesaj yazmaq üçün redaktor açacaq.
  5. Dəyişikliklərin tətbiqi: Rebase tarixçəsini və yeni commit mesajını yadda saxladıqdan sonra, Git birləşdirməni həyata keçirəcək.

Son üç commit-i birləşdirmək üçün interaktiv rebase nümunəsi:

git rebase -i HEAD~3
# Redaktor açılır və aşağıdakı kimi sətirlər görünür:
# pick 08f66c1 Commit 1
# pick d7e8a23 Commit 2
# pick 1b2c3d4 Commit 3
# Bunu dəyiş:
# pick 08f66c1 Commit 1
# squash d7e8a23 Commit 2
# squash 1b2c3d4 Commit 3
# Yadda saxla və çıx. Sonra yeni commit mesajını redaktə et.

Squash-un üstünlükləri:

  • Təmiz tarixçə: Kiçik commit-lərin sayını azaldır, dəyişikliklərin loglarını daha anlaşılan edir.
  • Axtarışın asanlaşdırılması: Tarixçə daxilində vacib dəyişiklikləri tapmaq daha asandır.
  • Geri alma rahatlığı: Bir böyük commit, çox kiçik commit-lərdən daha asan geri alınır.

Çatışmazlıqlar:

  • Ətraflı məlumatın itirilməsi: Commit-lərin birləşdirilməsi, hər kiçik addım haqqında məlumatın itirilməsinə səbəb olur.
  • Komanda işində çətinlik: Artıq göndərilmiş commit-ləri birləşdirmək, digər komanda üzvləri üçün push-larda konfliktlərə səbəb ola bilər. Paylaşılan commit-lər üçün git push --force istifadə etmək lazımdır və bu risklidir.

Squash istifadəsi diqqətlə düşünülməli və komanda siyasəti və layihənin xüsusiyyətlərinə bağlı olmalıdır.