Git'te belirli bir taahhüdü bir şubeden diğerine nasıl birleştiririm?


Yanıtlar:


233

git cherry-pick <commit>Komut tek esasen, çalışma dalında bunu rebase, (her ne şubesinden) işlemek ve almasına izin veriyor.

Pro Git kitabının 5. Bölümü şemaları ve benzerleri ile birlikte yapabileceğimden daha iyi açıklıyor . ( Rebasing ile ilgili bölüm de iyi bir okuma.)

Son olarak, başka bir SO sorusunda kiraz toplama vs birleştirme vs yeniden basma hakkında bazı iyi yorumlar var .


1
Soru: diyelim ki kesinleştirme Akapalı dallı edilir masterve çocuk kaydedilmesini oluştururken, bunun üzerine bazı işler yapmak Byoluyla E. Diyelim ki Eyalnızca 1 satır eklendi D. Eğer git cherry-pick Eiçine master, bu geçerlidir tüm değişiklikleri Ayoluyla Eiçine masterdal ya da yok sadece gelen değişikliği uygulamak Diçin E, yani bunun için yalnızca bu 1 satır ekler master? Eğer durum birinciyse, ikincisini nasıl elde edebilirim? (elle kopyalama ve yapıştırma dışında)
chharvey

7
git cherry-pick -n <komut> Eğer kiraz seçiminin otomatik olarak yapılmasını istemiyorsanız.
Ben Flynn

6

BranchA bir uzaktan kumandaya itilmemişse, taahhütleri rebasebasitçe ve daha sonra kullanarak yeniden sıralayabilirsiniz merge. Kullanımı tercih edilir mergeüzerinde rebaseyinelenen hareketin yaratmaz çünkü mümkün olduğunda.

git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]

2

KAYNAK: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

Tanıtılan işi bir daldan diğerine taşımanın diğer yolu da kiraz toplamaktır. Git'teki kiraz toplama, tek bir taahhüt için bir rebase gibidir. Bir taahhütte sunulan yamayı alır ve şu anda bulunduğunuz dalda yeniden uygulamaya çalışır. Bir konu dalında çok sayıda taahhüdünüz varsa ve bunlardan yalnızca birini birleştirmek istiyorsanız veya bir konu dalında yalnızca bir taahhüdünüz varsa ve rebase çalıştırmak yerine kiraz seçimini tercih ediyorsanız faydalıdır. Örneğin, şöyle bir projeniz olduğunu varsayalım:

resim açıklamasını buraya girin

Taahhüt e43a6'yı ana dalınıza çekmek istiyorsanız,

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

Bu, e43a6'da sunulan aynı değişikliği çeker, ancak uygulanan tarih farklı olduğundan yeni bir taahhüt SHA-1 değeri alırsınız. Şimdi geçmişiniz şöyle:

resim açıklamasını buraya girin

Artık konu dalınızı kaldırabilir ve çekmek istemediğiniz taahhütleri bırakabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.