Rebase
- Okunuşu
- ribeys
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
Ö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
# 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-leaseSı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
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- MergeSürüm Kontrolü, s. 29Git'te merge, bir branch'teki değişiklikleri başka bir branch'e katarak ayrı geliştirme hatlarını tek ve ortak bir geçmişte yeniden birleştirir.
- BranchSürüm Kontrolü, s. 2Git'te branch, bir özellik ya da düzeltme üzerinde, birleştirene kadar ana kodu etkilemeden çalışmanızı sağlayan bağımsız bir geliştirme hattıdır.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- Pull RequestSürüm Kontrolü, s. 32Pull request, bir branch'teki değişiklikleri başka bir branch'e birleştirme önerisidir; kod birleşmeden önce ekibe inceleme, tartışma ve test alanı sunar.
- Cherry-pickSürüm Kontrolü, s. 3Git'te cherry-pick, belirli bir commit'in değişikliklerini geldiği branch'in geri kalanını birleştirmeden, mevcut branch'inize yeni bir commit olarak kopyalar.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin