Git Rebase
Git rebase, Git’in versiyon kontrol sisteminde sıkça kullanılan bir komuttur ve dalların tarihçesini düzenlemek, commit’leri daha temiz bir şekilde organize etmek için kullanılır. Amacı, bir daldaki değişiklikleri alıp bir diğer dalın üstüne eklemektir. Git rebase, özellikle merge komutuna bir alternatiftir, fakat farklı bir çalışma prensibi vardır.
Git Rebase Nedir?
Git rebase, bir dalın commit geçmişini başka bir dalın son hali üzerine taşır. Örneğin, “feature” adlı bir dalda çalışıyorsanız ve bu dalı “main” dalı üzerine rebase ederseniz, “feature” dalındaki tüm commit’ler, “main” dalındaki en son commit’in üzerine taşınır. Bu işlem, commit geçmişinizi daha temiz ve düz bir şekilde görünmesini sağlar, çünkü farklı dallarda dağınık commit’ler yerine tek bir lineer commit geçmişi olur.
Git Rebase Nasıl Kullanılır?
1. Dalın Üzerine Rebase Etmek
git checkout featuregit rebase main
Yukarıdaki komutlar, önce “feature” dalına geçer ve ardından bu dalı “main” dalı üzerine rebase eder. Bu işlem sonrasında, “feature” dalındaki commit’ler, “main” dalının en son hali üzerine taşınır.
2. Interaktif Rebase (Interactive Rebase)
Interaktif rebase, commit’leri yeniden sıralamanıza, birleştirmenize (squash), düzenlemenize veya silmenize olanak tanır. Özellikle bir dizi commit’i düzenlemek istediğinizde kullanılır.
git rebase -i HEAD~3
Bu komut, son üç commit’i interaktif modda düzenlemenizi sağlar. Rebase işlemi başladığında, bir metin düzenleyici açılır ve burada commit’lerle ne yapmak istediğinizi belirleyebilirsiniz:
- pick: Commit’i olduğu gibi tutar.
- squash: Commit’i bir önceki commit ile birleştirir.
- edit: Commit’i düzenler.
- reword: Commit mesajını düzenler.
3. Rebase Sırasında Çakışmaları (Conflicts) Çözmek
// Çakışmaları çözün ve ardından:git add .git rebase --continue
Rebase işlemini durdurmak isterseniz:
git rebase --abort
Git Merge ve Rebase Farkı
-
Merge: İki dalı birleştirirken commit geçmişi korunur, yani dalın tüm commit’leri diğer dala olduğu gibi eklenir. Bu, dallı bir commit geçmişine neden olabilir.
-
Rebase: Commit’leri yeniden yazdığı için lineer bir commit geçmişi oluşturur. Tarihsel karmaşıklığı azaltır.
Ne Zaman Rebase Kullanmalıyım?
- Dal geçmişini temiz ve düzenli tutmak istediğinizde.
- İş arkadaşlarınızla çalışırken commit geçmişini düz bir çizgi halinde tutarak, projeyi daha kolay anlaşılır hale getirmek için.
- Henüz birleştirilmemiş commit’lerinizi (local) yeniden düzenlemek veya daha anlamlı hale getirmek için.
Ancak, ortak bir dalda (örneğin main) paylaşılan commit’leri rebase etmekten kaçınmak gerekir çünkü bu durum commit geçmişinde değişiklik yaparak karışıklığa yol açabilir.
Git rebase, özellikle commit geçmişinizi temiz tutmak istediğinizde çok kullanışlı bir araçtır, fakat dikkatli kullanılmalıdır.
Ornek kullanim
main üzerinde çalıştığımızı varsayalım ve my-test adında yeni bir rebase branch üzerinde degişiklik yapıp bunu main ile birleştireceğimizi varsayalım.
Adım 1: Yeni Branch’e Geçiş
Önce my-test adında bir branch olusturup bu branch’e geçelim ve değişikliklerimizi burada yapalım.
git checkout -b my-test
Eğer bu branch zaten varsa, doğrudan ona geçebilirsiniz:
git checkout my-test
Adım 2: Değişiklikleri Stage’lemek
Tüm değişiklikleri stage’leyelim ve commit edelim.
git add .git commit -m "Added tests for Home page components using Cypress"
Adım 3: Git Rebase ile Main Branch’e Birleştirme
Şimdi main branch’ine geçiş yapalım ve rebase işlemini gerçekleştirelim.
1- Main branch’e geçiş:
git checkout main
2- Main branch’i güncelleyelim (eğer uzaktan yeni bir değişiklik varsa):
git pull origin main
3- my-test branch’ini rebase edelim:
git rebase my-test
Bu işlem, my-test branch’inde yapılan değişiklikleri main branch’ine sanki doğrudan orada yapılmış gibi birleştirir.
Adım 4: Rebase Tamamlandıktan Sonra Push
Rebase işlemi tamamlandığında, değişiklikleri main branch’ine push edelim:
git push origin main
Bu adımlarla değişiklikleriniz main branch’e rebase edilerek birleştirilmiş olacak. Eğer bir çakışma yaşarsanız, Git size bu çakışmaları çözmeniz için rehberlik edecektir.