Başlıca yanıtlar, belirli bir taahhütten gelen değişikliklerin mevcut şubeye nasıl uygulanacağını açıklar . "Nasıl birleştirilir" ile kastettiğiniz buysa, önerdikleri gibi kiraz toplama kullanın.
Ancak aslında bir birleşme istiyorsanız , yani iki ebeveynle yeni bir taahhüt istiyorsanız - mevcut daldaki mevcut taahhüt ve değişiklikleri uygulamak istediğiniz taahhüt - o zaman kiraz toplama bunu başaramaz.
Örneğin, oluşturma işleminiz en son etikete (kullanarak git describe
) göre sürüm dizelerini otomatik olarak ayarlamak için git soyunun avantajından yararlanıyorsa gerçek birleştirme geçmişine sahip olmak arzu edilebilir .
Kiraz toplama yerine gerçek bir işlem yapabilir git merge --no-commit
ve ardından istemediğiniz değişiklikleri kaldırmak için dizini manuel olarak ayarlayabilirsiniz.
Diyelim ki daldasınız ve şubenin A
ucundaki taahhüdü birleştirmek istiyorsunuz B
:
git checkout A
git merge --no-commit B
Şimdi iki ebeveynle bir taahhüt oluşturmaya hazırsınız, mevcut ipucu A
ve B
. Bununla birlikte, B dalında daha önce yapılan taahhütler de dahil olmak üzere, istediğinizden daha fazla değişiklik uygulayabilirsiniz. Bu istenmeyen değişiklikleri geri almanız ve ardından taahhütte bulunmanız gerekir.
(Çalışma dizininin durumunu ve dizini birleştirme işleminden önceki haline geri döndürmenin kolay bir yolu olabilir, böylece ilk etapta istediğiniz taahhüdü kiraz olarak seçmek için temiz bir sayfa kullanabilirsiniz. O temiz levhayı nasıl elde edeceğimi bilmiyorum git checkout HEAD
ve git reset HEAD
her ikisi de birleştirme durumunu kaldıracak ve bu yöntemin amacını yenecek.)
Bu nedenle, istenmeyen değişiklikleri manuel olarak geri alın. Örneğin,
git revert --no-commit 012ea56
her istenmeyen taahhüt için 012ea56
.
Bir şeyleri ayarlamayı bitirdiğinizde, taahhüdünüzü oluşturun:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Artık sadece istediğiniz değişikliğe sahipsiniz ve soy ağacı, teknik olarak B'den birleştirdiğinizi gösteriyor.