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?
Section titled “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?
Section titled “Git Rebase Nasıl Kullanılır?”1. Dalın Üzerine Rebase Etmek
Section titled “1. Dalın Üzerine Rebase Etmek”git checkout featuregit rebase mainYukarı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)
Section titled “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~3Bu 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
Section titled “3. Rebase Sırasında Çakışmaları (Conflicts) Çözmek”// Çakışmaları çözün ve ardından:git add .git rebase --continueRebase işlemini durdurmak isterseniz:
git rebase --abortGit Merge ve Rebase Farkı
Section titled “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?
Section titled “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
Section titled “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ş
Section titled “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-testEğer bu branch zaten varsa, doğrudan ona geçebilirsiniz:
git checkout my-testAdım 2: Değişiklikleri Stage’lemek
Section titled “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
Section titled “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 main2- Main branch’i güncelleyelim (eğer uzaktan yeni bir değişiklik varsa):
git pull origin main3- my-test branch’ini rebase edelim:
git rebase my-testBu 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
Section titled “Adım 4: Rebase Tamamlandıktan Sonra Push”Rebase işlemi tamamlandığında, değişiklikleri main branch’ine push edelim:
git push origin mainBu 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.