Ana içeriğe geç

Rebase

Okunuşu
ribeys
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/rebase

Kısaca

Git'te rebase, bir branch'in commit'lerini başka bir commit'in üzerine yeniden uygular; geçmişi yeniden yazıp merge commit'siz, temiz ve doğrusal kılar.

Git'te rebase nedir?

Rebase, branch'inizdeki commit'leri alır ve genellikle main'deki en son commit olan farklı bir başlangıç noktasının üzerine tek tek yeniden uygular. Sonuç, işinize kodun en yeni sürümünden başlamışsınız gibi görünür. Commit'ler yeniden uygulandığı için Git, içerikleri aynı olsa bile yeni hash'lere sahip yeni commit'ler oluşturur.

Bir kitabın eski bir taslağına dayanarak bir bölüm yazmaya başladığınızı, bu arada kitabın güncellendiğini düşünün. Rebase, bölümünüzü en yeni taslağın üzerine kurulacak şekilde, sanki en başından ona göre yazmışsınız gibi yeniden yazmaya benzer. Geliştiriciler rebase'i feature branch'lerini güncel tutmak ve fazladan merge commit olmadan düz, okunması kolay bir geçmiş sağlamak için kullanır.

git rebase -i ile başlatılan etkileşimli rebase, geçmişi paylaşmadan önce düzenlemenizi sağlar. Commit'lerin sırasını değiştirebilir, birkaç küçük commit'i tek bir commit'te birleştirebilir (squash), commit mesajlarını yeniden yazabilir ya da commit'leri tamamen silebilirsiniz. Bir pull request açmadan önce branch'i toparlamanın yaygın bir yoludur.

Rebase'in altın kuralı, başkalarının zaten pull ettiği commit'leri asla rebase etmemektir. Rebase commit'leri yenileriyle değiştirdiğinden, iş birliği yaptığınız kişilerin geçmişi sizinkiyle uyuşmaz hale gelir; bu da karışıklığa ve mükerrer işe yol açar. Kendi branch'inizi push ettikten sonra rebase ederseniz, uzak depoyu görmediğiniz commit'lerin üzerine yazmayı reddeden git push --force-with-lease ile güncelleyin.

Bir bakışta

Rebase'den önce feature, main'den B commit'inde ayrılır ve D ile E commit'lerini alır, main ise C'ye ilerler; git rebase main sonrasında D ve E, C'nin üzerine yeni D' ve E' commit'leri olarak yeniden uygulanır.ÖnceABCDEmainfeatureSonragit rebase mainABCD'E'mainfeatureyeni commit'ler
Rebase, branch'i en yeni main'den başlamış gibi yeniden yazar. Yeniden uygulanan commit'ler yeni hash'ler alır.

Önemli noktalar

  • Rebase, commit'lerinizi başka bir branch ya da commit'in üzerine yeniden uygular.
  • Merge commit içermeyen doğrusal bir geçmiş oluşturur.
  • Rebase edilen commit'ler, yeni hash'lere sahip yeni commit'lerdir.
  • Etkileşimli rebase (git rebase -i) commit'lerin sırasını değiştirebilir, squash edebilir, mesajlarını yeniden yazabilir ya da silebilir.
  • Başkalarının üzerine çalışmaya başladığı commit'leri asla rebase etmeyin.

Örnek

Bir feature branch'i main üzerine rebase etmekbash
# Update your feature branch with the latest main
git switch feature/search-bar
git fetch origin
git rebase origin/main

# If a conflict appears: fix the files, then continue
git add src/search.ts
git rebase --continue   # or: git rebase --abort to cancel

# Tidy up the last 3 commits (squash, reword, reorder)
git rebase -i HEAD~3

# Update the remote branch safely after rewriting history
git push --force-with-lease

Sık sorulan sorular

git merge ile git rebase arasındaki fark nedir?

İkisi de bir branch'teki değişiklikleri diğerine entegre eder. Merge geçmişi korur ve bir merge commit ekleyebilir; rebase ise doğrusal bir geçmiş için commit'lerinizi diğer branch'in üzerine yeniden yazar.

Rebase'i ne zaman kullanmamalıyım?

main gibi başkalarının üzerinde çalıştığı, paylaşılan bir branch'teki commit'leri rebase etmekten kaçının. Bunları yeniden yazmak, herkesi kendi kopyalarını uzlaştırmaya zorlar ve iş kaybına ya da mükerrer işe yol açabilir.

git pull --rebase ne yapar?

Uzak depodan yeni commit'leri alır ve bir merge commit oluşturmak yerine yerel commit'lerinizi bunların üzerine rebase eder. Bu, ekip arkadaşlarınızla senkronize olurken branch geçmişinizi doğrusal tutar.

Sık karşılaştırılanlar

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar