CodeBlanks Logo Icon CodeBlanks

Rebase nedir?

git rebase'in commit'leri nasıl yeniden yazdığını öğrenirsin.

Rebase nedir?

git rebase komutu, bir dalın tabanını (başlangıç noktasını) başka bir commit'e taşıma işlemidir. Dalındaki commit'leri geçici olarak kenara alır, hedef daldaki yeni commit'leri uygular ve ardından senin commit'lerini bunların üzerine teker teker yeniden ekler (replay). Sonuçta dallanma kırılmaları olmayan, tamamen düz ve doğrusal (linear) bir tarihçe oluşur.

git checkout ozellik-dali
git rebase main

Bu sayede proje geçmişi sanki tüm değişiklikler sırayla ve tek bir hat üzerinde yapılmış gibi görünür.

Tarihçeyi yeniden yazma etkisi

Rebase işlemi sırasında commit'lerin içeriği korunsa da ebeveynleri ve tarihleri değiştiği için commit hash'leri tamamen yeniden yazılır. Bu nedenle rebase bir tarihçe yeniden yazma aracıdır. Doğrusal geçmiş sayesinde git log ve hata ayıklama araçlarını kullanmak çok daha kolaylaşır.

# ozellik dalini main uzerine rebase et
git rebase main
# cakisma olursa cozulur ve devam edilir
git rebase --continue

Rebase sonrasında dal sanki az önce doğrudan main dalının en son halinden açılmış gibi tertemiz durur.

Uygulama Dalı rebase ile doğrusal hale getir

gelistirme dalını git rebase -q main ile rebase et ve ardından git log --format="%s" komutuyla tüm commit başlıklarını listele.

Başlangıç kodu

terminal
git init -q
git config user.name "Mert"
git config user.email "mert@example.com"
echo "taban" > temel.txt
git add temel.txt
git commit -qm "Temel commit"

git checkout -q -b gelistirme
echo "gelistirme 1" > modul.txt
git add modul.txt
git commit -qm "Modul eklendi"

git checkout -q main
echo "ana guncelleme" > guncel.txt
git add guncel.txt
git commit -qm "Ana guncellendi"

git checkout -q gelistirme

# gelistirme dalini main uzerine rebase et ve log basliklarini listele

Örnek çözüm

terminal
git init -q
git config user.name "Mert"
git config user.email "mert@example.com"
echo "taban" > temel.txt
git add temel.txt
git commit -qm "Temel commit"

git checkout -q -b gelistirme
echo "gelistirme 1" > modul.txt
git add modul.txt
git commit -qm "Modul eklendi"

git checkout -q main
echo "ana guncelleme" > guncel.txt
git add guncel.txt
git commit -qm "Ana guncellendi"

git checkout -q gelistirme

git rebase -q main
git log --format="%s"

Beklenen çıktı

Modul eklendi
Ana guncellendi
Temel commit

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 git rebase main komutu özellik dalında çalıştırıldığında commit'lere ne olur?

  • Sadece çalışma alanındaki değişiklikler sahneye aktarılır
  • Commit'ler main'in ucuna yeniden uygulanır ve yeni hash değerleri üretilir Doğru cevap
  • Commit'ler silinir ve dal doğrudan main dalına dönüşür
  • İki dalı birleştiren iki ebeveynli yeni bir merge commit oluşturulur

Açıklama: Rebase işlemi commit'leri yeni taban üzerine kopyalayıp yeniden uyguladığı için tarihçeyi yeniden yazar ve yeni commit hash'leri üretir.

2 Rebase işlemini başlat

Soru
git ____ main
Cevap
git rebase main

Açıklama: git rebase main komutu, mevcut dalı main dalının en son commit'i üzerine taşır.

3 Rebase kavramları

Kavram Anlamı
git rebase <hedef> Dalı hedef commit üzerine taşır
Yeniden yazma Commit hash'lerini baştan üretir
Doğrusal tarihçe Dallanma kırılması olmayan düz akış
--continue Çakışma çözülünce rebase'i sürdürür

Orta seviye bölümündeki tüm dersler

20 Orta seviye finali

  1. Dal yönetimi
  2. Rebase
  3. Çatışma
  4. PR akışı