Git Cherry-Pick Söz Dizimi
git cherry-pick söz dizimini anlamak, bu komutu etkili kullanmanın anahtarıdır. Mesele sadece commit seçmek değil, istenen sonucu elde etmek için onları tam isabetle uygulamaktır.
Tek bir commit’i cherry-pick etmenin temel söz dizimi şöyledir:
git cherry-pick <commit-hash>
git cherry-pick: İşlemi başlatan komut.<commit-hash>: Cherry-pick etmek istediğiniz commit’in benzersiz tanımlayıcısı (SHA-1 hash). Bu hash’i commit geçmişini listelemek içingit logkomutunu çalıştırarak bulabilirsiniz.
Yukarıdaki komutu çalıştırdığınızda, Git belirtilen commit’ten gelen değişiklikleri geçerli dala uygular ve aynı değişikliklere sahip ancak farklı hash’e sahip yeni bir commit oluşturur.
Komutun yalnızca commit’in kendisini, orijinal daldaki bağlamı veya ebeveyn geçmişini değil, aktardığını unutmamak önemlidir.
Git ve GitHub’a yeni misiniz? Sürüm kontrolüne, yeni başlayanlar için hazırlanan şu GitHub ve Git eğitimi ile başlayın.
Git Cherry-Pick Nasıl Kullanılır: Adım Adım Örnekler
Artık git cherry-pick’in temel söz dizimini anladığınıza göre, komutu çalışırken görme zamanı geldi.
Bu bölüm, cherry-pick’in yararlı olduğu yaygın temel ve daha karmaşık senaryolarda size yol gösterecek uygulamalı örnekler sunar. Her örnek, bir veya daha fazla commit’ten gelen değişikliklerin başka bir dala nasıl uygulanacağını gösterir.
Örnek 1: Tek bir commit’i cherry-pick etmek
Diyelim ki, bir özellik dalında yaptığınız bir düzeltmeyi, tüm özellik dalını birleştirmeden ana dala uygulamak istiyorsunuz.
- Önce, aşağıdaki komutu çalıştırarak cherry-pick etmek istediğiniz commit’in hash’ini bulun:
git log
- Commit’in hash’ini bulun.
- Ana dala geçin:
git checkout main
- Cherry-pick komutunu çalıştırın (hash’in
abc1234olduğunu varsayalım):
git cherry-pick abc1234
Bu komutu çalıştırdığınızda Git, abc1234 ile tanımlanan commit’ten gelen değişiklikleri geçerli dalınıza (bu durumda main) uygular. Git, orijinal commit ile aynı değişiklikleri içeren ancak yeni bir commit hash’ine sahip, ana dal üzerinde yeni bir commit oluşturur.
Örnek 2: Birden çok commit’i cherry-pick etmek
Bazı durumlarda, bir daldan başka bir dala birden fazla ayrı commit uygulamanız gerekebilir. Diyelim ki özellik dalınızda ana dala taşınması gereken üç ayrı commit var.
git logkullanarak cherry-pick etmek istediğiniz her commit’in hash’ini bulun:
git log
- Ana dala geçin:
git checkout main
- Cherry-pick komutunu commit’leri listeleyerek çalıştırın:
git cherry-pick abc1234 def5678 ghi7890
Örnek 3: Bir commit aralığını cherry-pick etmek
Diyelim ki özellik dalında bir dizi commit yaptınız ve her birini tek tek belirtmeden bunları tek seferde ana dala uygulamak istiyorsunuz. Bunu nasıl yaparsınız?
- Cherry-pick etmek istediğiniz başlangıç ve bitiş commit’lerini belirlemek için
git logkullanın (ör.abc1234’tenghi7890’a). - Ana dala geçin:
git checkout main
- Commit aralığıyla cherry-pick komutunu çalıştırın:
git cherry-pick abc1234...ghi7890
Örnek 4: Uzak bir daldan commit cherry-pick etmek
Bazen, kritik bir düzeltme uzak bir dalda bulunur ve tüm dalı birleştirmeden onu yerel dalınıza uygulamak istersiniz. Bunu nasıl yapacağınız burada:
- Uzak depodan en son değişiklikleri alın
git fetch origin
- İhtiyacınız olan hash’i bulmak için uzak daldaki commit’leri listeleyin:
git log origin/feature_branch --oneline
- Gerekli commit hash’inin
abc1234olduğunu varsayalım. - Yerel ana dalınıza geçin:
git checkout main
- Uzak daldaki commit’i cherry-pick edin:
git cherry-pick abc1234
Bu, tüm dalı birleştirmeden uzak bir daldan bir commit uygulamanıza olanak tanır.
Uzak bir dalı checkout etmek mi gerekiyor? Adım adım uzak dallar için Git checkout rehberini izleyin.
Örnek 5: Bir commit’i cherry-pick etmek ve değiştirmek
Bir commit’i cherry-pick ettiğiniz halde, commit etmeden önce küçük değişiklikler yapmanız gerekiyorsa, Git’in etkileşimli modunu kullanabilirsiniz. Şöyle yapın:
- Hedef dala geçin:
git checkout main
- Commit etmeden önce duracak şekilde cherry-pick yapın:
git cherry-pick -n abc1234
-n (veya --no-commit) bayrağı değişiklikleri uygular ama commit oluşturmaz.
- Gerektiği gibi dosyaları değiştirin.
- Değişiklikleri aşamaya alın ve elle commit edin:
git add .
git commit -m "Modified cherry-picked commit from feature_branch"
Bu, bir cherry-pick edilmiş commit’i son haline getirmeden önce üzerinde ince ayar yapmanız gerektiğinde kullanışlıdır.
Git Cherry-Pick Sırasında Çakışmaların Yönetimi
Dallar arasında commit’leri cherry-pick ederken, özellikle kod tabanı önemli ölçüde ayrıştıysa çakışmalar kaçınılmazdır.
cherry-pick değişiklikleri temiz bir şekilde uygulamak için tasarlanmış olsa da, farklılıkları her zaman otomatik olarak uzlaştıramaz. Bu durumlarda çakışmaların elle çözülmesi gerekir. Çakışmaların nasıl ortaya çıktığını ve nasıl ele alınacağını anlamak, bir cherry-pick işlemini tamamlamak için kritik önemdedir.
Çakışmalar nasıl oluşur
Çakışmalar genellikle, cherry-pick edilen commit’ten gelen değişiklikler ile hedef dalda hâlihazırda bulunan değişiklikler çakıştığında veya çeliştiğinde oluşur. Örneğin:
- Aynı satırın her iki dalda da değiştirilmesi: Kodun aynı satırı hem kaynak hem hedef dalda değiştirildiyse Git hangi sürümü uygulayacağını bilemez.
- Bir dalda silinen, diğerinde değiştirilen dosya: Bir dosya bir dalda silinip cherry-pick edilen commit’te değiştirildiyse, Git dosyanın korunup korunmayacağına veya değişikliklerin uygulanıp uygulanmayacağına karar veremez.
- İlgisiz değişiklikler ancak aynı dosya: Değişiklikler ilgisiz görünse bile, aynı dosyada gerçekleşiyorsa Git bunu potansiyel bir çakışma olarak işaretleyebilir.
Bir çakışma oluştuğunda, Git cherry-pick işlemini durdurur ve devam etmeden önce çözülmesi gereken bir çakışma durumunda çalışma dizininizi bırakır.
Çakışmaların çözülmesi
Bir kez çakışma oluştuğunda, Git çakışan dosyaları gösterecek ve tutarsızlıkları elle çözmeniz gerekecektir. Çakışmaları şu şekilde çözebilirsiniz:
1. Çakışan dosyaları kontrol edin: Hangi dosyaların çakıştığını görmek için şu komutu çalıştırın:
git status
Komut, çakışma içeren dosyaların listesini gösterecektir.
2. Çakışmaları çözün: Sorunları çözmek için çakışan dosyaları elle düzenleyebilirsiniz. Çakışma işaretleyicilerini (<<<<<<<, =======, >>>>>>>) kaldırın ve hangi değişikliklerin korunacağına veya nasıl birleştirileceğine karar verin.
3. Git Mergetool kullanın (isteğe bağlı): Çakışmaları elle çözmek zahmetliyse, çakışmaları görselleştirmeye ve çözmeye yardımcı bir birleştirme aracı kullanabilirsiniz:
git mergetool
Yapılandırmanıza bağlı olarak, yukarıdaki komut görsel bir birleştirme aracını açar; bu da çakışmaları gözden geçirmeyi ve çözmeyi kolaylaştırır.
4. Çakışmaları çözüldü olarak işaretleyin: Çakışmaları çözdükten sonra, dosyaları şu komutla çözüldü olarak işaretleyin:
git add <conflicted-file>
5. Cherry-pick’i tamamlayın: Tüm çakışmalar çözüldüğünde ve dosyalar aşamaya alındığında, cherry-pick’i şu komutla tamamlayın:
git cherry-pick --continue
Visual Studio Code ve GitHub gibi birçok modern IDE ve araç, yerleşik birleştirme çakışması çözüm özellikleri sunar. GitHub’ın web arayüzü, paylaşılan depolarda yerel ortama geçmeden doğrudan çekme isteklerinde çakışmaları çözmenize olanak tanır.
Çakışmadan sonra bir commit’i atlamak
Bazen, bir çakışmayı çözmek fazla karmaşık olabilir ya da commit’in aslında gerekli olmadığını fark edebilirsiniz. Bu gibi durumlarda, commit’i tamamen atlayabilirsiniz.
1. Geçerli cherry-pick sürecini atlayın: Çakışma çok karmaşıksa ve commit’i uygulamak istemiyorsanız, şu komutla atlayabilirsiniz:
git cherry-pick --skip
Bu komut, çakışan commit’i bırakır ve (birden çok commit’i cherry-pick ediyorsanız) sıradakine geçer.
2. Cherry-pick’in tamamını iptal edin: cherry-pick işlemini tamamen iptal etmek istiyorsanız, şunu çalıştırın:
git cherry-pick --abort
Bu komut, cherry-pick’e başlamadan önce çalışma dizininizin bulunduğu duruma geri döndürür.
Commit geçmişinizi temizlemek mi istiyorsunuz? Birden fazla commit’i tek bir commit’te nasıl birleştireceğinizi Git squash eğitimi ile öğrenin.
Git Cherry-Pick Kullanımı için En İyi Uygulamalar
cherry-pick’in yanlış kullanımı, projenizin sürüm kontrolünde karmaşık geçmişlere ve kafa karışıklığına yol açabilir. Bu tuzaklardan kaçınmak için, en iyi uygulamalara uymak cherry-pick’i gereksiz karmaşıklık katmadan etkili şekilde kullanmanızı sağlar.
Küçük ve belirgin tutun
Cherry-pick, hata düzeltmeleri veya küçük özellik iyileştirmeleri gibi iyi tanımlanmış görevleri ele alan küçük, belirli commit’lerde en etkilidir.
Birden çok değişikliği bir arada barındıran büyük, karmaşık commit’leri cherry-pick etmekten kaçının; çünkü bunlar çakışmalara yol açabilir ve kod tabanını yönetmeyi zorlaştırabilir. Commit ne kadar hedefe yönelikse, istenmeyen yan etkiler olmadan uygulaması o kadar kolaydır.
Cherry-pick’lerinizi belgelendirin
Açık bir geçmişi korumak için, cherry-pick yaparken her zaman uygun bağlam sağlayın. Bu, ayrıntılı commit mesajları veya dokümantasyondaki notlar aracılığıyla yapılabilir.
Özetle, bir cherry-pick’in neden gerekli olduğunu açıklamalısınız. Bu, özellikle uzun ömürlü dallar veya işbirlikçi ortamlar arasında cherry-pick yaparken önemlidir; çünkü gelecekteki katkıda bulunanların, değişikliklerin neden seçici olarak uygulandığını anlamalarına yardımcı olur.
Commit geçmişini gözden geçirin
Cherry-pick yapmadan önce, hem kaynak hem hedef dalın commit geçmişini gözden geçirin. Bu adım, cherry-pick etmeyi düşündüğünüz commit’in başka değişikliklere bağımlı olup olmadığını belirlemeye yardımcı olur. Eksik bağımlılıklar, eksik işlevselliğe veya hatalara neden olabilir; bu nedenle cherry-pick’in yarım kalmış özellikler veya güncellemeler getirmediğinden emin olun.
Cherry-pick’i aşırı kullanmaktan kaçının
Cherry-pick, belirli değişiklikleri uygulamak için kullanışlı olsa da, aşırı kullanımı dallar arasında yinelenen commit’lerle parçalı bir geçmişe yol açabilir. Bu da belirli değişikliklerin kaynağını izlemeyi veya daha geniş geliştirme bağlamını anlamayı zorlaştırabilir.
Cherry-pick yapmadan önce birleştirme (merge) veya yeniden taban oluşturmanın (rebase) daha uygun bir strateji olup olmadığını her zaman değerlendirin. Commit geçmişini kalabalıklaştırmamak için cherry-pick’i ölçülü ve amacına uygun kullanın.
Git’te gereksiz dosyalarla uğraşıyor musunuz? .gitignore’u etkili kullanmayı şu Git ignore eğitimi ile öğrenin.
Git Cherry-Pick ile Yaygın Sorunların Giderilmesi
cherry-pick kullanırken ortaya çıkan sorunları gidermek, Git’in temel mekanizmalarını net bir şekilde anlamayı gerektirir. Bu bölümde, cherry-pick sırasında karşılaşabileceğiniz bazı yaygın sorunları ve bunları nasıl çözeceğinizi ele alacağım.
Var olmayan bir commit’i cherry-pick etmek
Bazen, geçerli daldan erişilemeyen veya zaten birleştirilmiş bir commit’i cherry-pick etmeye çalışabilirsiniz. Bu genellikle commit’in bulunamadığını veya uygulanamadığını belirten bir hata mesajıyla sonuçlanır.
1. Commit bulunamadı: Cherry-pick etmeye çalıştığınız commit hash’i, geçerli deponuzda veya dal bağlamında bulunmadığında olur. Commit’in bulunduğu dalda git log ile commit geçmişini kontrol ederek doğru commit’e referans verdiğinizden emin olun. Çözüm:
- Commit hash’ini doğru olduğundan emin olmak için iki kez kontrol edin.
- Commit’in erişiminiz olan bir dalda bulunduğunu doğrulayın.
- Commit uzak bir daldaysa,
git fetchile dalın getirildiğinden emin olun.
2. Commit zaten uygulanmış: Commit hedef dala zaten birleştirilmiş veya cherry-pick edilmişse, Git bunu yinelenmesini engeller. Bu koruma, geçmişi temiz tutar ve gereksiz değişikliklerden kaçınır. Çözüm:
- Commit’in hedef dalda zaten olup olmadığını kontrol etmek için
git logkullanın. - Gerekirse, değişiklikler zaten uygulandığından
cherry-pickişleminden vazgeçin.
Rebase veya merge sonrasında cherry-pick yapmak
Rebase veya merge sonrasında cherry-pick yapmak, dallarınızın geçmişinin değişmiş olması nedeniyle karmaşıklıklar getirebilir. Rebase commit geçmişini yeniden yazar; merge ise dalları birleştirir. Her ikisi de cherry-pick’in uygulanabilirliğini etkileyebilir.
1. Rebase edilmiş commit’lerden kaynaklı çakışmalar: Rebase sonrasında commit geçmişi yeniden yazılır; bu da rebase sürecinde değiştirilen commit’leri cherry-pick etmeye çalışırsanız sorunlara yol açabilir. cherry-pick yeniden yazılmış geçmişle uyuşmayan değişiklikleri uygulamaya çalıştığı için çakışmalarla karşılaşabilirsiniz. Çözüm:
- Cherry-pick edeceğiniz commit’in zaten değiştirilmediğinden emin olmak için rebase sonrasında
git logile commit geçmişini dikkatlice inceleyin. - Çakışmaları, standart bir
cherry-picksürecinde olduğu gibigit statusve elle düzenleme ile çözün.
2. Merge sonrasında yinelenen commit’ler: Dalları birleştirmek, cherry-pick etmek istediğiniz bir commit’in zaten birleştirilmiş geçmişe dahil olmasıyla sonuçlanabilir. Bunu tekrar cherry-pick etmek, geçmişinizi kalabalıklaştıran yinelenen commit’lere yol açabilir ve değişiklikleri izlemeyi zorlaştırabilir. Çözüm:
- Cherry-pick’ten önce, commit’in zaten birleştirilmiş olup olmadığını doğrulamak için her iki daldaki commit geçmişini inceleyin.
- Commit hedef dalda zaten varsa, aynı commit’i cherry-pick etmekten kaçının.
Git’te değişiklikleri geri almak mı istiyorsunuz? Git reset ve revert eğitimi ile git reset ve git revert’i ne zaman kullanacağınızı öğrenin.
Sonuç
git cherry-pick, bir dalın tamamını birleştirmeden belirli commit’leri bir daldan diğerine uygulamanın güçlü bir yoludur. İster bir hata düzeltmesini, ister bir özellik güncellemesini taşıyın, ister yalnızca seçici değişiklikler uygulayın; Git geçmişinizi temiz ve odaklı tutmaya yardımcı olur.
Bu rehberde, tekli ve çoklu commit’lerin nasıl cherry-pick edileceğini, çakışmaların nasıl çözüleceğini ve yaygın tuzaklardan kaçınmak için en iyi uygulamaların nasıl takip edileceğini ele aldım. cherry-pick’i akıllıca kullanarak, deponuzu düzenli tutarken iş akışınızı iyileştirebilirsiniz.
Git becerilerinizi derinleştirmek istiyorsanız, sağlam bir başlangıç için Foundations of Git kursuna göz atın. Ayrıca Introduction to GitHub Concepts’ı keşfedebilir veya GitHub Foundations beceri yolu ile yapılandırılmış bir yaklaşım benimseyebilirsiniz.
Artık cherry-pick’i profesyonel gibi nasıl kullanacağınızı bildiğinize göre, bir sonraki projenizde denemeye başlayın!
FAQs
Aynı commit’i iki kez cherry-pick edersem ne olur?
Zaten hedef dala uygulanmış bir commit’i cherry-pick etmeye çalışırsanız, Git yeni bir hash ile yinelenen bir commit oluşturabilir. Bir commit’in zaten uygulanıp uygulanmadığını kontrol etmek için şunu kullanın:
git log --oneline
Alternatif olarak emin değilseniz şunu kullanın:
git cherry-pick -n <commit-hash>
Bu, değişiklikleri commit etmeden uygular ve sonlandırmadan önce gözden geçirmenize olanak tanır.
Silinmiş bir daldan commit’leri cherry-pick edebilir miyim?
Evet! Dal silinmiş olsa bile commit’ler Git’in geçmişinde hâlâ bulunabilir.
Commit hash’ini bulmak için git reflog kullanın, ardından her zamanki gibi cherry-pick yapın.
Ancak Git, dalı zaten çöp toplamadan (garbage collect) geçmişse commit’ler kaybolmuş olabilir.
Farklı bir depodan bir commit’i nasıl cherry-pick ederim?
Dosya silmeler içeren bir commit’i cherry-pick edebilir miyim?
Evet, cherry-pick bir commit’teki tüm değişiklikleri, dosya silmeler dahil, korur. Bir commit bir dosyayı siliyorsa, onu cherry-pick etmek hedef dalda dosyayı kaldırır.
Bir cherry-pick’i nasıl geri alırım?
git cherry-pick ile git apply arasındaki fark nedir?
git cherry-pick, belirli bir commit’i kopyalar ve commit meta verilerini koruyarak hedef dala uygular.git apply, yama dosyalarını (git diffile oluşturulan) uygulamak için kullanılır; ancak yeni bir commit oluşturmaz veya commit geçmişini korumaz.
Orijinal yazarı koruyarak bir commit’i nasıl cherry-pick edebilirim?
Sıralı olmayan birden çok commit’i cherry-pick edebilir miyim?
Dallar arasında cherry-pick yaparken çakışmaları nasıl önlerim?
git cherry-pick’i ne zaman kullanmaktan kaçınmalıyım?
git cherry-pick’in aşırı kullanımı, dallar arasında yinelenen commit’lerle düzensiz bir commit geçmişine yol açabilir. Şu durumlarda kaçınmak en iyisidir:
- Değişiklikler birden fazla bağımlı commit içeriyorsa —
mergeveyarebasedaha iyi bir seçim olabilir. - Dalları düzenli olarak senkronize etmeniz gerekiyorsa — rebase veya merge geçmişi daha temiz tutar.
- Commit büyük kapsamlı yeniden yapılandırmalar (refactor) içeriyorsa; çünkü cherry-pick yalnızca belirli değişiklikleri taşır, daha geniş dal bağlamını taşımaz.


İşbirliğine dayalı yazılım geliştirme ortamlarında dallarla çalışmak, özellikleri, hata düzeltmelerini veya denemeleri izole etmek için gereklidir. Ancak, bazen bir dalın tamamını birleştirmeden bir daldan belirli değişiklikleri alıp başka bir dala uygulamanız gerekir. İşte bu noktada
git cherry-pickpaha biçilmezdir.Bu eğitimin amacı,
git cherry-pickaracını etkili bir şekilde nasıl kullanacağınıza dair kapsamlı bir rehber sunmaktır. Komutun söz dizimini öğrenecek, çakışmalarla nasıl başa çıkılacağını anlayacak ve kaçınılması gereken en iyi uygulamalar ile yaygın tuzakları keşfedeceksiniz. Hadi başlayalım!Git Cherry-Pick Nedir?
git cherry-pick, geliştiricilere kaynak kodları üzerinde ince ayar denetimi sağlayan temel bir Git komutudur.Diğer Git işlemlerinin aksine, tüm dal üzerinde çalışan
mergeveyarebasegibi işlemlerden farklı olarak,cherry-pickbir daldan belirli commit’leri alıp başka bir dala uygulamanıza olanak tanır. Bu, özellikle bir daldaki tüm değişiklikler yerine yalnızca belirli değişiklikleri entegre etmeniz gereken senaryolarda hassasiyet sağlar.git cherry-pickkomutu, seçilen commit’lerin içeriğini kopyalayıp hedef dalda yeni commit’ler oluşturarak commit geçmişinin bütünlüğünü korur.git cherry-pick ne zaman kullanılır
git cherry-pickiçin kullanım örnekleri şunlardır: