Ben BranchA
113 kaydedilmesini öncesinde olduğu BranchB
.
Ama sadece son 10 ya da daha fazla işlemin BranchA
birleştirilmesini istiyorum BranchB
.
Bunu yapmanın bir yolu var mı?
Ben BranchA
113 kaydedilmesini öncesinde olduğu BranchB
.
Ama sadece son 10 ya da daha fazla işlemin BranchA
birleştirilmesini istiyorum BranchB
.
Bunu yapmanın bir yolu var mı?
Yanıtlar:
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 .
A
kapalı dallı edilir master
ve çocuk kaydedilmesini oluştururken, bunun üzerine bazı işler yapmak B
yoluyla E
. Diyelim ki E
yalnızca 1 satır eklendi D
. Eğer git cherry-pick E
içine master
, bu geçerlidir tüm değişiklikleri A
yoluyla E
içine master
dal ya da yok sadece gelen değişikliği uygulamak D
iç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)
BranchA bir uzaktan kumandaya itilmemişse, taahhütleri rebase
basitçe ve daha sonra kullanarak yeniden sıralayabilirsiniz merge
. Kullanımı tercih edilir merge
üzerinde rebase
yinelenen 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]
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:
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:
Artık konu dalınızı kaldırabilir ve çekmek istemediğiniz taahhütleri bırakabilirsiniz.